forked from ktaranov/sqlserver-kit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdbo.sp_Depends.sql
153 lines (143 loc) · 7.01 KB
/
dbo.sp_Depends.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
IF OBJECT_ID('dbo.sp_Depends', 'P') IS NULL
EXECUTE ('CREATE PROCEDURE dbo.sp_Depends AS SELECT 1');
GO
ALTER PROCEDURE dbo.sp_Depends(
@objectName SYSNAME = N''
, @objectClass NVARCHAR(60) = N'OBJECT'
, @debug BIT = 0
)
AS
/*
Program: dbo.sp_depends_v2
Developer: Manjuke Fernando
Date: 06.07.2018
*/
BEGIN
SET NOCOUNT ON;
DECLARE @Sql AS NVARCHAR(MAX) = N'';
IF OBJECT_ID(@objectName) IS NULL
THROW 50001, 'Object with @objectName is not exists in current database!', 1
ELSE
IF @debug = 1 PRINT('-- OBJECT_ID = ' + CAST(OBJECT_ID(@objectName) AS NVARCHAR(50)));
BEGIN TRY
IF @debug = 1
SET @Sql = N'DECLARE @RefObjectName SYSNAME = N''' + @objectName + ''';' + CHAR(13) +
N'DECLARE @objectClass NVARCHAR(60) = N''' + @objectClass + ''';' + CHAR(13);
SET @Sql = @Sql +
N'SELECT CONCAT(sch.[name], ''.'', Obj.[name]) AS [name]
,(CASE Obj.type
WHEN ''C'' THEN ''CHECK constraint''
WHEN ''D'' THEN ''DEFAULT (constraint or stand-alone)''
WHEN ''F'' THEN ''FOREIGN KEY constraint''
WHEN ''PK'' THEN ''PRIMARY KEY constraint''
WHEN ''R'' THEN ''Rule (old-style, stand-alone)''
WHEN ''TA'' THEN ''Assembly (CLR-integration) trigger''
WHEN ''TR'' THEN ''SQL trigger''
WHEN ''UQ'' THEN ''UNIQUE constraint''
WHEN ''AF'' THEN ''Aggregate function (CLR)''
WHEN ''C'' THEN ''CHECK constraint''
WHEN ''D'' THEN ''DEFAULT (constraint or stand-alone)''
WHEN ''F'' THEN ''FOREIGN KEY constraint''
WHEN ''FN'' THEN ''SQL scalar function''
WHEN ''FS'' THEN ''Assembly (CLR) scalar-function''
WHEN ''FT'' THEN ''Assembly (CLR) table-valued function''
WHEN ''IF'' THEN ''SQL inline table-valued function''
WHEN ''IT'' THEN ''Internal table''
WHEN ''P'' THEN ''SQL Stored Procedure''
WHEN ''PC'' THEN ''Assembly (CLR) stored-procedure''
WHEN ''PG'' THEN ''Plan guide''
WHEN ''PK'' THEN ''PRIMARY KEY constraint''
WHEN ''R'' THEN ''Rule (old-style, stand-alone)''
WHEN ''RF'' THEN ''Replication-filter-procedure''
WHEN ''S'' THEN ''System base TABLE''
WHEN ''SN'' THEN ''Synonym''
WHEN ''SO'' THEN ''Sequence OBJECT''
WHEN ''U'' THEN ''Table (user-defined)''
WHEN ''V'' THEN ''VIEW''
WHEN ''SQ'' THEN ''Service queue''
WHEN ''TA'' THEN ''Assembly (CLR) DML trigger''
WHEN ''TF'' THEN ''SQL table-valued-function''
WHEN ''TR'' THEN ''SQL DML trigger''
WHEN ''TT'' THEN ''Table type''
WHEN ''UQ'' THEN ''UNIQUE CONSTRAINT''
WHEN ''X'' THEN ''Extended stored procedure''
ELSE ''Undefined''
END) AS [type]
, Obj.create_date
, Obj.modify_date
, src.referenced_minor_name AS [column]
, IIF(src.is_selected = 1, ''yes'', ''no'') AS is_selected
, IIF(src.is_updated = 1, ''yes'', ''no'') AS is_updated
, IIF(src.is_select_all = 1, ''yes'', ''no'') AS is_select_all
--, IIF(src.is_insert_all = 1, ''yes'', ''no'') AS is_insert_all
FROM
sys.dm_sql_referenced_entities (@RefObjectName, @objectClass) AS src
JOIN sys.objects AS Obj ON src.referenced_id = Obj.[object_id]
JOIN sys.schemas AS sch ON sch.[schema_id] = Obj.[schema_id]
-- WHERE 1=1
-- AND src.referenced_minor_name IS NOT NULL
;
SELECT CONCAT(Src.referencing_schema_name, ''.'', Src.referencing_entity_name) AS [name]
, (CASE Obj.type
WHEN ''C'' THEN ''CHECK constraint''
WHEN ''D'' THEN ''DEFAULT (constraint or stand-alone)''
WHEN ''F'' THEN ''FOREIGN KEY constraint''
WHEN ''PK'' THEN ''PRIMARY KEY constraint''
WHEN ''R'' THEN ''Rule (old-style, stand-alone)''
WHEN ''TA'' THEN ''Assembly (CLR-integration) trigger''
WHEN ''TR'' THEN ''SQL trigger''
WHEN ''UQ'' THEN ''UNIQUE constraint''
WHEN ''AF'' THEN ''Aggregate function (CLR)''
WHEN ''C'' THEN ''CHECK constraint''
WHEN ''D'' THEN ''DEFAULT (constraint or stand-alone)''
WHEN ''F'' THEN ''FOREIGN KEY constraint''
WHEN ''FN'' THEN ''SQL scalar function''
WHEN ''FS'' THEN ''Assembly (CLR) scalar-function''
WHEN ''FT'' THEN ''Assembly (CLR) table-valued function''
WHEN ''IF'' THEN ''SQL inline table-valued function''
WHEN ''IT'' THEN ''Internal table''
WHEN ''P'' THEN ''SQL Stored Procedure''
WHEN ''PC'' THEN ''Assembly (CLR) stored-procedure''
WHEN ''PG'' THEN ''Plan guide''
WHEN ''PK'' THEN ''PRIMARY KEY constraint''
WHEN ''R'' THEN ''Rule (old-style, stand-alone)''
WHEN ''RF'' THEN ''Replication-filter-procedure''
WHEN ''S'' THEN ''System base TABLE''
WHEN ''SN'' THEN ''Synonym''
WHEN ''SO'' THEN ''Sequence OBJECT''
WHEN ''U'' THEN ''Table (user-defined)''
WHEN ''V'' THEN ''VIEW''
WHEN ''SQ'' THEN ''Service queue''
WHEN ''TA'' THEN ''Assembly (CLR) DML trigger''
WHEN ''TF'' THEN ''SQL table-valued-function''
WHEN ''TR'' THEN ''SQL DML trigger''
WHEN ''TT'' THEN ''Table type''
WHEN ''UQ'' THEN ''UNIQUE CONSTRAINT''
WHEN ''X'' THEN ''Extended stored procedure''
ELSE ''Undefined''
END) AS [type]
, Obj.create_date
, Obj.modify_date
FROM sys.dm_sql_referencing_entities (@RefObjectName, @objectClass) AS Src
INNER JOIN sys.objects AS Obj ON Obj.[object_id] = Src.referencing_id;';
IF @debug = 1
BEGIN
PRINT(SUBSTRING(@Sql, 1, 4000));
PRINT(SUBSTRING(@Sql, 4001, 8000));
END
ELSE
EXEC sp_executesql @Sql
, N'@RefObjectName AS SYSNAME, @objectClass AS NVARCHAR(60)'
, @RefObjectName = @objectName
, @objectClass = @objectClass;
END TRY
BEGIN CATCH
PRINT 'Error: ' + CONVERT(varchar(50), ERROR_NUMBER()) +
', Severity: ' + CONVERT(varchar(5), ERROR_SEVERITY()) +
', State: ' + CONVERT(varchar(5), ERROR_STATE()) +
', Procedure: ' + ISNULL(ERROR_PROCEDURE(), '-') +
', Line: ' + CONVERT(varchar(5), ERROR_LINE()) +
', User name: ' + CONVERT(sysname, CURRENT_USER);
END CATCH
END;
GO