Skip to content

Instantly share code, notes, and snippets.

@ststeiger
Created September 15, 2015 13:13
Show Gist options
  • Select an option

  • Save ststeiger/8b54f91f7d7bab801629 to your computer and use it in GitHub Desktop.

Select an option

Save ststeiger/8b54f91f7d7bab801629 to your computer and use it in GitHub Desktop.
Generate data for self-referencing table
DECLARE @bla nvarchar(128)
SET @bla = N'T_FMS_Reports'
-- SET @bla = N'T_Users'
SELECT
FK_TABLE_NAME,
FK_COLUMN_NAME -- RE_RE_UID
,REFERENCED_COLUMN_NAME, -- RE_UID
-- 'SELECT * FROM ' + REPLACE(QUOTENAME(@bla), '''', '''''') AS cmd2,
'
;WITH CTE AS
(
SELECT *
FROM ' + REPLACE(QUOTENAME(FK_TABLE_NAME), '''', '''''') + '
WHERE ' + REPLACE(QUOTENAME(FK_COLUMN_NAME), '''', '''''') + ' IS NULL
-- AND ' + REPLACE(QUOTENAME(FK_TABLE_NAME), '''', '''''') + '.RE_Status <> 99
UNION ALL
SELECT ' + REPLACE(QUOTENAME(FK_TABLE_NAME), '''', '''''') + '.* FROM CTE
INNER JOIN ' + REPLACE(QUOTENAME(FK_TABLE_NAME), '''', '''''') + '
ON ' + REPLACE(QUOTENAME(FK_TABLE_NAME), '''', '''''') + '.' + REPLACE(QUOTENAME(FK_COLUMN_NAME), '''', '''''') + ' = CTE.' + REPLACE(QUOTENAME(REFERENCED_COLUMN_NAME), '''', '''''') + '
-- AND ' + REPLACE(QUOTENAME(FK_TABLE_NAME), '''', '''''') + '.RE_Status <> 99
)
SELECT * FROM CTE
OPTION ( MAXRECURSION 0 )
' AS cmd
FROM V_DELDATA_ForeignKeyRelations
WHERE (1=1)
AND FK_TABLE_SCHEMA = 'dbo'
AND FK_TABLE_NAME = @bla
AND FK_TABLE_NAME = REFERENCED_TABLE_NAME
AND FK_TABLE_SCHEMA = REFERENCED_TABLE_SCHEMA
/*
;WITH CTE AS
(
SELECT *
FROM T_FMS_Reports
WHERE RE_RE_UID IS NULL
AND RE_Status <> 99
UNION ALL
SELECT T_FMS_Reports.* FROM CTE
INNER JOIN T_FMS_Reports
ON T_FMS_Reports.RE_RE_UID = CTE.RE_UID
AND T_FMS_Reports.RE_Status <> 99
)
SELECT * FROM CTE
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment