Skip to content

Commit 644ba02

Browse files
committed
Fix bug introducted in #359
Bug introduced duplicate FK's which caused one-to-one to become one-to-may.
1 parent d54f8a3 commit 644ba02

File tree

1 file changed

+150
-152
lines changed

1 file changed

+150
-152
lines changed

EntityFramework.Reverse.POCO.Generator/EF.Reverse.POCO.Core.ttinclude

Lines changed: 150 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,92 +1533,92 @@ IF OBJECT_ID('tempdb..#PrimaryKeys') IS NOT NULL DROP TABLE #PrimaryKeys;
15331533
IF OBJECT_ID('tempdb..#ForeignKeys') IS NOT NULL DROP TABLE #ForeignKeys;
15341534

15351535
SELECT 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
15461546
INTO #Columns
15471547
FROM INFORMATION_SCHEMA.COLUMNS C
15481548
WHERE C.TABLE_NAME NOT IN ('EdmMetadata', '__MigrationHistory')
1549-
AND C.TABLE_NAME NOT LIKE 'sysdiagram%';
1549+
AND C.TABLE_NAME NOT LIKE 'sysdiagram%';
15501550

15511551
CREATE NONCLUSTERED INDEX IX_EfPoco_Columns
15521552
ON dbo.#Columns (TABLE_NAME)
15531553
INCLUDE (TABLE_SCHEMA,COLUMN_NAME,ORDINAL_POSITION,COLUMN_DEFAULT,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,DATETIME_PRECISION);
15541554

15551555
SELECT 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
15591559
INTO #PrimaryKeys
15601560
FROM 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
15651565
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY';
15661566

15671567
SELECT 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
15711571
INTO #ForeignKeys
15721572
FROM 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
15771577
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY';
15781578

15791579
SELECT 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
16081608
FROM #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
16201620
WHERE 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 = @"
16241624
SET 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
16631664
FROM 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

17031700
DECLARE @synonymDetailsQueryTemplate nvarchar(max) = 'USE [@synonmymDatabaseName];
17041701
INSERT 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
17931791
DECLARE @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
18091807
SELECT 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
19371935
SELECT 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
23022300
SELECT 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

Comments
 (0)