@@ -1533,92 +1533,92 @@ IF OBJECT_ID('tempdb..#PrimaryKeys') IS NOT NULL DROP TABLE #PrimaryKeys;
15331533IF OBJECT_ID('tempdb..#ForeignKeys') IS NOT NULL DROP TABLE #ForeignKeys;
15341534
15351535SELECT C.TABLE_SCHEMA,
1536- C.TABLE_NAME,
1537- C.COLUMN_NAME,
1538- C.ORDINAL_POSITION,
1539- C.COLUMN_DEFAULT,
1540- C.IS_NULLABLE,
1541- C.DATA_TYPE,
1542- C.CHARACTER_MAXIMUM_LENGTH,
1543- C.NUMERIC_PRECISION,
1544- C.NUMERIC_SCALE,
1545- C.DATETIME_PRECISION
1536+ C.TABLE_NAME,
1537+ C.COLUMN_NAME,
1538+ C.ORDINAL_POSITION,
1539+ C.COLUMN_DEFAULT,
1540+ C.IS_NULLABLE,
1541+ C.DATA_TYPE,
1542+ C.CHARACTER_MAXIMUM_LENGTH,
1543+ C.NUMERIC_PRECISION,
1544+ C.NUMERIC_SCALE,
1545+ C.DATETIME_PRECISION
15461546INTO #Columns
15471547FROM INFORMATION_SCHEMA.COLUMNS C
15481548WHERE C.TABLE_NAME NOT IN ('EdmMetadata', '__MigrationHistory')
1549- AND C.TABLE_NAME NOT LIKE 'sysdiagram%';
1549+ AND C.TABLE_NAME NOT LIKE 'sysdiagram%';
15501550
15511551CREATE NONCLUSTERED INDEX IX_EfPoco_Columns
15521552ON dbo.#Columns (TABLE_NAME)
15531553INCLUDE (TABLE_SCHEMA,COLUMN_NAME,ORDINAL_POSITION,COLUMN_DEFAULT,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,DATETIME_PRECISION);
15541554
15551555SELECT u.TABLE_SCHEMA,
1556- u.TABLE_NAME,
1557- u.COLUMN_NAME,
1558- u.ORDINAL_POSITION
1556+ u.TABLE_NAME,
1557+ u.COLUMN_NAME,
1558+ u.ORDINAL_POSITION
15591559INTO #PrimaryKeys
15601560FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
1561- INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1562- ON u.TABLE_SCHEMA COLLATE DATABASE_DEFAULT = tc.CONSTRAINT_SCHEMA COLLATE DATABASE_DEFAULT
1563- AND u.TABLE_NAME = tc.TABLE_NAME
1564- AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
1561+ INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1562+ ON u.TABLE_SCHEMA COLLATE DATABASE_DEFAULT = tc.CONSTRAINT_SCHEMA COLLATE DATABASE_DEFAULT
1563+ AND u.TABLE_NAME = tc.TABLE_NAME
1564+ AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
15651565WHERE CONSTRAINT_TYPE = 'PRIMARY KEY';
15661566
15671567SELECT DISTINCT
1568- u.TABLE_SCHEMA,
1569- u.TABLE_NAME,
1570- u.COLUMN_NAME
1568+ u.TABLE_SCHEMA,
1569+ u.TABLE_NAME,
1570+ u.COLUMN_NAME
15711571INTO #ForeignKeys
15721572FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
1573- INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1574- ON u.TABLE_SCHEMA COLLATE DATABASE_DEFAULT = tc.CONSTRAINT_SCHEMA COLLATE DATABASE_DEFAULT
1575- AND u.TABLE_NAME = tc.TABLE_NAME
1576- AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
1573+ INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1574+ ON u.TABLE_SCHEMA COLLATE DATABASE_DEFAULT = tc.CONSTRAINT_SCHEMA COLLATE DATABASE_DEFAULT
1575+ AND u.TABLE_NAME = tc.TABLE_NAME
1576+ AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
15771577WHERE CONSTRAINT_TYPE = 'FOREIGN KEY';
15781578
15791579SELECT c.TABLE_SCHEMA AS SchemaName,
1580- c.TABLE_NAME AS TableName,
1581- t.TABLE_TYPE AS TableType,
1582- c.ORDINAL_POSITION AS Ordinal,
1583- c.COLUMN_NAME AS ColumnName,
1584- CAST(CASE WHEN IS_NULLABLE = 'YES' THEN 1
1585- ELSE 0
1586- END AS BIT) AS IsNullable,
1587- DATA_TYPE AS TypeName,
1588- ISNULL(CHARACTER_MAXIMUM_LENGTH, 0) AS MaxLength,
1589- CAST(ISNULL(NUMERIC_PRECISION, 0) AS INT) AS Precision,
1590- ISNULL(COLUMN_DEFAULT, '') AS [Default],
1591- CAST(ISNULL(DATETIME_PRECISION, 0) AS INT) AS DateTimePrecision,
1592- ISNULL(NUMERIC_SCALE, 0) AS Scale,
1593- CAST(COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') AS BIT) AS IsIdentity,
1594- CAST(CASE WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
1595- WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsComputed') = 1 THEN 1
1596- WHEN DATA_TYPE = 'TIMESTAMP' THEN 1
1597- WHEN DATA_TYPE = 'UNIQUEIDENTIFIER'
1598- AND LOWER(ISNULL(COLUMN_DEFAULT, '')) LIKE '%newsequentialid%' THEN 1
1599- ELSE 0
1600- END AS BIT) AS IsStoreGenerated,
1601- CAST(CASE WHEN pk.ORDINAL_POSITION IS NULL THEN 0
1602- ELSE 1
1603- END AS BIT) AS PrimaryKey,
1604- ISNULL(pk.ORDINAL_POSITION, 0) PrimaryKeyOrdinal,
1605- CAST(CASE WHEN fk.COLUMN_NAME IS NULL THEN 0
1606- ELSE 1
1607- END AS BIT) AS IsForeignKey
1580+ c.TABLE_NAME AS TableName,
1581+ t.TABLE_TYPE AS TableType,
1582+ c.ORDINAL_POSITION AS Ordinal,
1583+ c.COLUMN_NAME AS ColumnName,
1584+ CAST(CASE WHEN IS_NULLABLE = 'YES' THEN 1
1585+ ELSE 0
1586+ END AS BIT) AS IsNullable,
1587+ DATA_TYPE AS TypeName,
1588+ ISNULL(CHARACTER_MAXIMUM_LENGTH, 0) AS MaxLength,
1589+ CAST(ISNULL(NUMERIC_PRECISION, 0) AS INT) AS Precision,
1590+ ISNULL(COLUMN_DEFAULT, '') AS [Default],
1591+ CAST(ISNULL(DATETIME_PRECISION, 0) AS INT) AS DateTimePrecision,
1592+ ISNULL(NUMERIC_SCALE, 0) AS Scale,
1593+ CAST(COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') AS BIT) AS IsIdentity,
1594+ CAST(CASE WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
1595+ WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsComputed') = 1 THEN 1
1596+ WHEN DATA_TYPE = 'TIMESTAMP' THEN 1
1597+ WHEN DATA_TYPE = 'UNIQUEIDENTIFIER'
1598+ AND LOWER(ISNULL(COLUMN_DEFAULT, '')) LIKE '%newsequentialid%' THEN 1
1599+ ELSE 0
1600+ END AS BIT) AS IsStoreGenerated,
1601+ CAST(CASE WHEN pk.ORDINAL_POSITION IS NULL THEN 0
1602+ ELSE 1
1603+ END AS BIT) AS PrimaryKey,
1604+ ISNULL(pk.ORDINAL_POSITION, 0) PrimaryKeyOrdinal,
1605+ CAST(CASE WHEN fk.COLUMN_NAME IS NULL THEN 0
1606+ ELSE 1
1607+ END AS BIT) AS IsForeignKey
16081608FROM #Columns c
1609- LEFT OUTER JOIN #PrimaryKeys pk
1610- ON c.TABLE_SCHEMA = pk.TABLE_SCHEMA
1611- AND c.TABLE_NAME = pk.TABLE_NAME
1612- AND c.COLUMN_NAME = pk.COLUMN_NAME
1613- LEFT OUTER JOIN #ForeignKeys fk
1614- ON c.TABLE_SCHEMA = fk.TABLE_SCHEMA
1615- AND c.TABLE_NAME = fk.TABLE_NAME
1616- AND c.COLUMN_NAME = fk.COLUMN_NAME
1617- INNER JOIN INFORMATION_SCHEMA.TABLES t
1618- ON c.TABLE_SCHEMA COLLATE DATABASE_DEFAULT = t.TABLE_SCHEMA COLLATE DATABASE_DEFAULT
1619- AND c.TABLE_NAME COLLATE DATABASE_DEFAULT = t.TABLE_NAME COLLATE DATABASE_DEFAULT
1609+ LEFT OUTER JOIN #PrimaryKeys pk
1610+ ON c.TABLE_SCHEMA = pk.TABLE_SCHEMA
1611+ AND c.TABLE_NAME = pk.TABLE_NAME
1612+ AND c.COLUMN_NAME = pk.COLUMN_NAME
1613+ LEFT OUTER JOIN #ForeignKeys fk
1614+ ON c.TABLE_SCHEMA = fk.TABLE_SCHEMA
1615+ AND c.TABLE_NAME = fk.TABLE_NAME
1616+ AND c.COLUMN_NAME = fk.COLUMN_NAME
1617+ INNER JOIN INFORMATION_SCHEMA.TABLES t
1618+ ON c.TABLE_SCHEMA COLLATE DATABASE_DEFAULT = t.TABLE_SCHEMA COLLATE DATABASE_DEFAULT
1619+ AND c.TABLE_NAME COLLATE DATABASE_DEFAULT = t.TABLE_NAME COLLATE DATABASE_DEFAULT
16201620WHERE c.TABLE_NAME NOT IN ('EdmMetadata', '__MigrationHistory')
1621- AND c.TABLE_NAME NOT LIKE 'sysdiagram%'";
1621+ AND c.TABLE_NAME NOT LIKE 'sysdiagram%' ";
16221622
16231623 private const string SynonymTableSQLSetup = @"
16241624SET NOCOUNT ON;
@@ -1627,78 +1627,75 @@ IF OBJECT_ID('tempdb..#SynonymTargets') IS NOT NULL DROP TABLE #SynonymTargets;
16271627
16281628-- Synonyms
16291629-- Create the #SynonymDetails temp table structure for later use
1630- SELECT TOP (0) sc.name AS SchemaName,
1631- sn.name AS TableName,
1632- 'SN' AS TableType,
1633- COLUMNPROPERTY(c.object_id, c.name, 'ordinal') AS Ordinal,
1634- c.name AS ColumnName,
1635- c.is_nullable AS IsNullable,
1636- ISNULL(TYPE_NAME(c.system_type_id), t.name) AS TypeName,
1637- ISNULL(COLUMNPROPERTY(c.object_id, c.name, 'charmaxlen'), 0) AS [MaxLength],
1638- CAST(ISNULL(CONVERT(TINYINT, CASE WHEN c.system_type_id IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) THEN c.precision
1639- END), 0) AS INT) AS [Precision],
1640- ISNULL(CONVERT(NVARCHAR(4000), OBJECT_DEFINITION(c.default_object_id)), '') AS [Default],
1641- CAST(ISNULL(CONVERT(SMALLINT, CASE WHEN c.system_type_id IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE(c.system_type_id, c.scale)
1642- END), 0) AS INT) AS DateTimePrecision,
1643- ISNULL(CONVERT(INT, CASE WHEN c.system_type_id IN (40, 41, 42, 43, 58, 61) THEN NULL
1644- ELSE ODBCSCALE(c.system_type_id, c.scale)
1645- END), 0) AS Scale,
1646- CAST(COLUMNPROPERTY(OBJECT_ID(sn.base_object_name), c.name, 'IsIdentity') AS BIT) AS IsIdentity,
1647- CAST(CASE WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(sc.NAME) + '.' + QUOTENAME(o.NAME)), c.NAME, 'IsIdentity') = 1 THEN 1
1648- WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(sc.NAME) + '.' + QUOTENAME(o.NAME)), c.NAME, 'IsComputed') = 1 THEN 1
1649- WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(sc.NAME) + '.' + QUOTENAME(o.NAME)), c.NAME, 'GeneratedAlwaysType') > 0 THEN 1
1650- WHEN ISNULL(TYPE_NAME(c.system_type_id), t.NAME) = 'TIMESTAMP' THEN 1
1651- WHEN ISNULL(TYPE_NAME(c.system_type_id), t.NAME) = 'UNIQUEIDENTIFIER'
1652- AND LOWER(ISNULL(CONVERT(NVARCHAR(4000), OBJECT_DEFINITION(c.default_object_id)), '')) LIKE '%newsequentialid%' THEN 1
1653- ELSE 0
1654- END AS BIT) AS IsStoreGenerated,
1655- CAST(CASE WHEN pk.ORDINAL_POSITION IS NULL THEN 0
1656- ELSE 1
1657- END AS BIT) AS PrimaryKey,
1658- ISNULL(pk.ORDINAL_POSITION, 0) PrimaryKeyOrdinal,
1659- CAST(CASE WHEN fk.COLUMN_NAME IS NULL THEN 0
1660- ELSE 1
1661- END AS BIT) AS IsForeignKey
1662- INTO #SynonymDetails
1630+ SELECT TOP (0)
1631+ sc.name AS SchemaName,
1632+ sn.name AS TableName,
1633+ 'SN' AS TableType,
1634+ COLUMNPROPERTY(c.object_id, c.name, 'ordinal') AS Ordinal,
1635+ c.name AS ColumnName,
1636+ c.is_nullable AS IsNullable,
1637+ ISNULL(TYPE_NAME(c.system_type_id), t.name) AS TypeName,
1638+ ISNULL(COLUMNPROPERTY(c.object_id, c.name, 'charmaxlen'), 0) AS MaxLength,
1639+ CAST(ISNULL(CONVERT(TINYINT, CASE WHEN c.system_type_id IN (48, 52, 56, 59, 60, 62, 106, 108, 122, 127) THEN c.precision
1640+ END), 0) AS INT) AS Precision,
1641+ ISNULL(CONVERT(NVARCHAR(4000), OBJECT_DEFINITION(c.default_object_id)), '') AS [Default],
1642+ CAST(ISNULL(CONVERT(SMALLINT, CASE WHEN c.system_type_id IN (40, 41, 42, 43, 58, 61) THEN ODBCSCALE(c.system_type_id, c.scale)
1643+ END), 0) AS INT) AS DateTimePrecision,
1644+ ISNULL(CONVERT(INT, CASE WHEN c.system_type_id IN (40, 41, 42, 43, 58, 61) THEN NULL
1645+ ELSE ODBCSCALE(c.system_type_id, c.scale)
1646+ END), 0) AS Scale,
1647+ CAST(COLUMNPROPERTY(OBJECT_ID(sn.base_object_name), c.NAME, 'IsIdentity') AS BIT) AS IsIdentity,
1648+ CAST(CASE WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(sc.NAME) + '.' + QUOTENAME(o.NAME)), c.NAME, 'IsIdentity') = 1 THEN 1
1649+ WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(sc.NAME) + '.' + QUOTENAME(o.NAME)), c.NAME, 'IsComputed') = 1 THEN 1
1650+ WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(sc.NAME) + '.' + QUOTENAME(o.NAME)), c.NAME, 'GeneratedAlwaysType') > 0 THEN 1
1651+ WHEN ISNULL(TYPE_NAME(c.system_type_id), t.NAME) = 'TIMESTAMP' THEN 1
1652+ WHEN ISNULL(TYPE_NAME(c.system_type_id), t.NAME) = 'UNIQUEIDENTIFIER'
1653+ AND LOWER(ISNULL(CONVERT(NVARCHAR(4000), OBJECT_DEFINITION(c.default_object_id)), '')) LIKE '%newsequentialid%' THEN 1
1654+ ELSE 0
1655+ END AS BIT) AS IsStoreGenerated,
1656+ CAST(CASE WHEN pk.ORDINAL_POSITION IS NULL THEN 0
1657+ ELSE 1
1658+ END AS BIT) AS PrimaryKey,
1659+ ISNULL(pk.ORDINAL_POSITION, 0) PrimaryKeyOrdinal,
1660+ CAST(CASE WHEN fk.COLUMN_NAME IS NULL THEN 0
1661+ ELSE 1
1662+ END AS BIT) AS IsForeignKey
1663+ INTO #SynonymDetails
16631664FROM sys.synonyms sn
1664- INNER JOIN sys.columns c
1665- ON c.[object_id] = OBJECT_ID(sn.base_object_name)
1666- INNER JOIN sys.schemas sc
1667- ON sc.[schema_id] = sn.[schema_id]
1668- LEFT JOIN sys.types t
1669- ON c.user_type_id = t.user_type_id
1670- INNER JOIN sys.objects o
1671- ON c.[object_id] = o.[object_id]
1672- LEFT OUTER JOIN (
1673- SELECT u.TABLE_SCHEMA,
1674- u.TABLE_NAME,
1675- u.COLUMN_NAME,
1676- u.ORDINAL_POSITION
1677- FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
1678- INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1679- ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA
1680- AND u.TABLE_NAME = tc.TABLE_NAME
1681- AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
1682- WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
1683- ) pk
1684- ON sc.name = pk.TABLE_SCHEMA
1685- AND sn.name = pk.TABLE_NAME
1686- AND c.name = pk.COLUMN_NAME
1687- LEFT OUTER JOIN (
1688- SELECT DISTINCT
1689- u.TABLE_SCHEMA,
1690- u.TABLE_NAME,
1691- u.COLUMN_NAME
1692- FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
1693- INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1694- ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA
1695- AND u.TABLE_NAME = tc.TABLE_NAME
1696- AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
1697- WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
1698- ) fk
1699- ON sc.name = fk.TABLE_SCHEMA
1700- AND sn.name = fk.TABLE_NAME
1701- AND c.name = fk.COLUMN_NAME;
1665+ INNER JOIN sys.COLUMNS c
1666+ ON c.[object_id] = OBJECT_ID(sn.base_object_name)
1667+ INNER JOIN sys.schemas sc
1668+ ON sc.[schema_id] = sn.[schema_id]
1669+ LEFT JOIN sys.types t
1670+ ON c.user_type_id = t.user_type_id
1671+ INNER JOIN sys.objects o
1672+ ON c.[object_id] = o.[object_id]
1673+ LEFT OUTER JOIN (SELECT u.TABLE_SCHEMA,
1674+ u.TABLE_NAME,
1675+ u.COLUMN_NAME,
1676+ u.ORDINAL_POSITION
1677+ FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
1678+ INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1679+ ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA
1680+ AND u.TABLE_NAME = tc.TABLE_NAME
1681+ AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
1682+ WHERE CONSTRAINT_TYPE = 'PRIMARY KEY') pk
1683+ ON sc.NAME = pk.TABLE_SCHEMA
1684+ AND sn.name = pk.TABLE_NAME
1685+ AND c.name = pk.COLUMN_NAME
1686+ LEFT OUTER JOIN (SELECT DISTINCT
1687+ u.TABLE_SCHEMA,
1688+ u.TABLE_NAME,
1689+ u.COLUMN_NAME
1690+ FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
1691+ INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
1692+ ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA
1693+ AND u.TABLE_NAME = tc.TABLE_NAME
1694+ AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
1695+ WHERE CONSTRAINT_TYPE = 'FOREIGN KEY') fk
1696+ ON sc.NAME = fk.TABLE_SCHEMA
1697+ AND sn.name = fk.TABLE_NAME
1698+ AND c.name = fk.COLUMN_NAME;
17021699
17031700DECLARE @synonymDetailsQueryTemplate nvarchar(max) = 'USE [@synonmymDatabaseName];
17041701INSERT INTO #SynonymDetails (SchemaName, TableName, TableType, Ordinal, ColumnName, IsNullable, TypeName, [MaxLength], [Precision],
@@ -1775,19 +1772,20 @@ WHERE st.DatabaseName = @synonmymDatabaseName;
17751772'
17761773
17771774-- Pull details about the synonym target from each database being referenced
1778- SELECT sc.name AS SynonymSchemaName, sn.name as SynonymName
1779- , sn.[object_id]
1780- , sn.base_object_name
1781- , OBJECT_ID(sn.base_object_name) as base_object_id
1782- , PARSENAME(sn.base_object_name, 1) as ObjectName
1783- , ISNULL(PARSENAME(sn.base_object_name, 2), sc.name) as SchemaName
1784- , ISNULL(PARSENAME(sn.base_object_name, 3), DB_NAME()) as DatabaseName
1785- , PARSENAME(sn.base_object_name, 4) as ServerName
1786- INTO #SynonymTargets
1787- FROM sys.synonyms sn
1788- INNER JOIN sys.schemas sc
1789- ON sc.[schema_id] = sn.[schema_id]
1790- WHERE ISNULL(PARSENAME(sn.base_object_name, 4), @@SERVERNAME) = @@SERVERNAME -- Only populate info from current server
1775+ SELECT sc.name AS SynonymSchemaName,
1776+ sn.name AS SynonymName,
1777+ sn.object_id,
1778+ sn.base_object_name,
1779+ OBJECT_ID(sn.base_object_name) AS base_object_id,
1780+ PARSENAME(sn.base_object_name, 1) AS ObjectName,
1781+ ISNULL(PARSENAME(sn.base_object_name, 2), sc.name) AS SchemaName,
1782+ ISNULL(PARSENAME(sn.base_object_name, 3), DB_NAME()) AS DatabaseName,
1783+ PARSENAME(sn.base_object_name, 4) AS ServerName
1784+ INTO #SynonymTargets
1785+ FROM sys.synonyms sn
1786+ INNER JOIN sys.schemas sc
1787+ ON sc.schema_id = sn.schema_id
1788+ WHERE ISNULL(PARSENAME(sn.base_object_name, 4), @@SERVERNAME) = @@SERVERNAME; -- Only populate info from current server
17911789
17921790-- Loop through synonyms and populate #SynonymDetails
17931791DECLARE @synonmymDatabaseName sysname = (SELECT TOP (1) DatabaseName FROM #SynonymTargets)
@@ -1804,7 +1802,7 @@ SET NOCOUNT OFF;
18041802";
18051803
18061804 private const string SynonymTableSQL = @"
1807- UNION ALL
1805+ UNION
18081806-- Synonyms
18091807SELECT SchemaName, TableName, TableType, Ordinal, ColumnName, IsNullable, TypeName, [MaxLength], [Precision],
18101808 [Default], DateTimePrecision, Scale, IsIdentity, IsStoreGenerated, PrimaryKey, PrimaryKeyOrdinal, IsForeignKey FROM #SynonymDetails";
@@ -1932,7 +1930,7 @@ SET NOCOUNT OFF;
19321930";
19331931
19341932 private const string SynonymForeignKeySQL = @"
1935- UNION ALL
1933+ UNION
19361934-- Synonyms
19371935SELECT FK_Table, FK_Column, PK_Table, PK_Column, Constraint_Name, fkSchema, pkSchema, primarykey, ORDINAL_POSITION,
19381936 CascadeOnDelete, IsNotEnforced FROM #SynonymFkDetails";
@@ -2297,7 +2295,7 @@ SET NOCOUNT OFF;
22972295";
22982296
22992297 private const string SynonymStoredProcedureSQL = @"
2300- UNION ALL
2298+ UNION
23012299-- Synonyms
23022300SELECT SPECIFIC_SCHEMA, SPECIFIC_NAME, ROUTINE_TYPE, ORDINAL_POSITION, PARAMETER_MODE, PARAMETER_NAME, DATA_TYPE
23032301 , CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, USER_DEFINED_TYPE FROM #SynonymStoredProcedureDetails";
0 commit comments