Skip to content

Instantly share code, notes, and snippets.

@xagronaut
Last active December 21, 2016 21:07
Show Gist options
  • Save xagronaut/6d2d802f0420374944cb48439bb13b6a to your computer and use it in GitHub Desktop.
Save xagronaut/6d2d802f0420374944cb48439bb13b6a to your computer and use it in GitHub Desktop.
Analysis query for SQL Server based on the sys.sql_dependencies view. Suitable for CSV export and import into Neo4j.
-- *******
-- * Track which objects in the database depend on other objects
-- *******
;WITH ObjectTypeNames AS (
SELECT [Type] = 'P', [Name] = 'DbProcedure' UNION ALL
SELECT [Type] = 'FN', [Name] = 'DbFunction' UNION ALL
SELECT [Type] = 'U', [Name] = 'DbTable' UNION ALL
SELECT [Type] = 'V', [Name] = 'DbView'
),
ObjectReferences AS (
SELECT DISTINCT
[ReferencerId] = sqd1.[object_id],
[ReferencerSchema] = OBJECT_SCHEMA_NAME(sqd1.[object_id]),
[ReferencerName] = OBJECT_NAME(sqd1.[object_id]),
[ReferencerFullName] = OBJECT_SCHEMA_NAME(sqd1.[object_id]) + '.' + OBJECT_NAME(sqd1.[object_id]),
[ReferencingType] = otn1.Name,
[ReferencedId] = sqd1.[referenced_major_id],
[ReferencedSchema] = OBJECT_SCHEMA_NAME(sqd1.referenced_major_id),
[ReferencedName] = OBJECT_NAME(sqd1.referenced_major_id),
[ReferencedFullName] = OBJECT_SCHEMA_NAME(sqd1.referenced_major_id) + '.' + OBJECT_NAME(sqd1.referenced_major_id),
[ReferencedType] = otn2.Name
FROM sys.sql_dependencies sqd1
JOIN sys.sysobjects o
ON sqd1.[object_id] = o.id
JOIN ObjectTypeNames otn1
ON o.xtype = otn1.[Type]
JOIN sys.sysobjects o2
ON sqd1.[referenced_major_id] = o2.id
JOIN ObjectTypeNames otn2
ON o2.xtype = otn2.[Type]
)
SELECT
ref.*
--, [ReferencerDefinition] = (SELECT OBJECT_DEFINITION(ref.ReferencerId) FOR XML PATH(''), type)
--, [ReferencedDefinition] = (SELECT OBJECT_DEFINITION(ref.ReferencedId) FOR XML PATH(''), type)
FROM ObjectReferences ref
ORDER BY ref.ReferencerFullName, ref.ReferencedFullName
// Load DbView-to-DbTable dependencies from CSV
LOAD CSV WITH HEADERS FROM 'http://localhost/neo4jImport/dependencies.txt'
AS item FIELDTERMINATOR '\t'
WITH item
WHERE item.ReferencingType = 'DbView' AND item.ReferencedType = 'DbTable'
MATCH (i:DbView { name: item.ReferencerName, schemaName: item.ReferencerSchema })
MATCH (j:DbTable { name: item.ReferencedName, schemaName: item.ReferencedSchema })
MERGE (i)-[r:REFERENCES]->(j)
RETURN item, i, r, j;
// Load DbProcedure-to-DbView dependencies from CSV
LOAD CSV WITH HEADERS FROM 'http://localhost/neo4jImport/dependencies.txt'
AS item FIELDTERMINATOR '\t'
WITH item
WHERE item.ReferencingType = 'DbProcedure' AND item.ReferencedType = 'DbView'
MATCH (i:DbProcedure { name: item.ReferencerName, schemaName: item.ReferencerSchema })
MATCH (j:DbView { name: item.ReferencedName, schemaName: item.ReferencedSchema })
MERGE (i)-[r:REFERENCES]->(j)
RETURN item, i, r, j;
// Load DbProcedure-to-DbTable dependencies from CSV
LOAD CSV WITH HEADERS FROM 'http://localhost/neo4jImport/dependencies.txt'
AS item FIELDTERMINATOR '\t'
WITH item
WHERE item.ReferencingType = 'DbProcedure' AND item.ReferencedType = 'DbTable'
MATCH (i:DbProcedure { name: item.ReferencerName, schemaName: item.ReferencerSchema })
MATCH (j:DbTable { name: item.ReferencedName, schemaName: item.ReferencedSchema })
MERGE (i)-[r:REFERENCES]->(j)
RETURN item, i, r, j;
// Load DbProcedure-to-DbFunction dependencies from CSV
LOAD CSV WITH HEADERS FROM 'http://localhost/neo4jImport/dependencies.txt'
AS item FIELDTERMINATOR '\t'
WITH item
WHERE item.ReferencingType = 'DbProcedure' AND item.ReferencedType = 'DbFunction'
MATCH (i:DbProcedure { name: item.ReferencerName, schemaName: item.ReferencerSchema })
MATCH (j:DbFunction { name: item.ReferencedName, schemaName: item.ReferencedSchema })
MERGE (i)-[r:REFERENCES]->(j)
RETURN item, i, r, j;
// Find relationships to DbProcedure
MATCH (n:DbProcedure { name: "ProcName" })-[]-(m) RETURN n, m;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment