-
Notifications
You must be signed in to change notification settings - Fork 113
Expand file tree
/
Copy pathtSQLt.DropClass.ssp.sql
More file actions
74 lines (72 loc) · 2.36 KB
/
tSQLt.DropClass.ssp.sql
File metadata and controls
74 lines (72 loc) · 2.36 KB
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
IF OBJECT_ID('tSQLt.DropClass') IS NOT NULL DROP PROCEDURE tSQLt.DropClass;
GO
---Build+
CREATE PROCEDURE tSQLt.DropClass
@ClassName NVARCHAR(MAX)
AS
BEGIN
DECLARE @Cmd NVARCHAR(MAX);
WITH ObjectInfo(name, type) AS
(
SELECT QUOTENAME(SCHEMA_NAME(O.schema_id))+'.'+QUOTENAME(O.name) , O.type
FROM sys.objects AS O
WHERE O.schema_id = SCHEMA_ID(PARSENAME(@ClassName, 1))
),
TypeInfo(name) AS
(
SELECT QUOTENAME(SCHEMA_NAME(T.schema_id))+'.'+QUOTENAME(T.name)
FROM sys.types AS T
WHERE T.schema_id = SCHEMA_ID(PARSENAME(@ClassName, 1))
),
XMLSchemaInfo(name) AS
(
SELECT QUOTENAME(SCHEMA_NAME(XSC.schema_id))+'.'+QUOTENAME(XSC.name)
FROM sys.xml_schema_collections AS XSC
WHERE XSC.schema_id = SCHEMA_ID(PARSENAME(@ClassName, 1))
),
DropStatements(no,cmd) AS
(
SELECT 10,
'DROP ' +
CASE type WHEN 'P' THEN 'PROCEDURE'
WHEN 'PC' THEN 'PROCEDURE'
WHEN 'U' THEN 'TABLE'
WHEN 'IF' THEN 'FUNCTION'
WHEN 'TF' THEN 'FUNCTION'
WHEN 'FN' THEN 'FUNCTION'
WHEN 'V' THEN 'VIEW'
END +
' ' +
name +
';'
FROM ObjectInfo
UNION ALL
SELECT 20,
'DROP TYPE ' +
name +
';'
FROM TypeInfo
UNION ALL
SELECT 30,
'DROP XML SCHEMA COLLECTION ' +
name +
';'
FROM XMLSchemaInfo
UNION ALL
SELECT 10000,'DROP SCHEMA ' + QUOTENAME(name) +';'
FROM sys.schemas
WHERE schema_id = SCHEMA_ID(PARSENAME(@ClassName, 1))
),
StatementBlob(xml)AS
(
SELECT cmd [text()]
FROM DropStatements
ORDER BY no
FOR XML PATH(''), TYPE
)
SELECT @Cmd = xml.value('/', 'NVARCHAR(MAX)')
FROM StatementBlob;
EXEC(@Cmd);
END;
---Build-
GO