sql server - MSSQL T-SQL Table Hierachy including parent/child(group) -
sql server - MSSQL T-SQL Table Hierachy including parent/child(group) -
i have query lists databases table hierarchy in relation level of fk/checks on referenced tables , columns.
this depict order in info deleted/inserted.
problem is, within want include path i.e. levels 1 through 'x' grouping path each follows (some might have multiple paths through levels).
anyone have suggestions, utilize cte recursively grab level. perchance utilize fk referenced table-name?
;with ctetbhierarchy ( select distinct 1 levelid , object_schema_name(parent.object_id) tableowner , parent.name tablename , parent.object_id tbobjid , object_name(refkey.referenced_object_id) referenced_tablename , refkey.referenced_object_id , refkey.referenced_column_id sys.objects parent left outer bring together sys.foreign_key_columns refkey on refkey.parent_object_id = parent.object_id , refkey.parent_object_id <> refkey.referenced_object_id , refkey.constraint_column_id = 1 refkey.parent_object_id null , parent.type = 'u' , parent.name <> 'dtproperties' union /* add together tables reference anchor rows */ select h.levelid + 1 , object_schema_name(parent.object_id) tableowner , object_name(parent.object_id) tablename , parent.object_id tbobjid , object_name(refkey.referenced_object_id) referenced_tablename , refkey.referenced_object_id , refkey.referenced_column_id sys.objects parent inner bring together sys.foreign_key_columns refkey on refkey.parent_object_id = parent.object_id , refkey.parent_object_id <> refkey.referenced_object_id , refkey.constraint_column_id = 1 inner bring together ctetbhierarchy h on h.tbobjid = refkey.referenced_object_id parent.type = 'u' , parent.name <> 'dtproperties' ) select distinct a.levelid, a.tableowner, a.tablename, a.referenced_tablename, cols.name referenced_colname, replace(a.tablename,(left(substring(a.tablename, charindex('.',a.tablename), 50),50)),'') tablearea, replace(a.referenced_tablename,(left(substring(a.referenced_tablename, charindex('.',a.referenced_tablename), 50),50)),'') reftablearea ctetbhierarchy left bring together sys.columns cols on a.referenced_object_id = cols.object_id , a.referenced_column_id = cols.column_id order levelid asc , tablename;
sql sql-server tsql foreign-keys
Comments
Post a Comment