forked from tSQLt-org/tSQLt
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtSQLt.RenameClass.ssp.sql
More file actions
38 lines (33 loc) · 1.34 KB
/
tSQLt.RenameClass.ssp.sql
File metadata and controls
38 lines (33 loc) · 1.34 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
IF OBJECT_ID('tSQLt.RenameClass') IS NOT NULL DROP PROCEDURE tSQLt.RenameClass;
GO
---Build+
CREATE PROCEDURE tSQLt.RenameClass
@SchemaName NVARCHAR(MAX),
@NewSchemaName NVARCHAR(MAX)
AS
BEGIN
DECLARE @MigrateObjectsCommand NVARCHAR(MAX);
SELECT @NewSchemaName = PARSENAME(@NewSchemaName, 1),
@SchemaName = PARSENAME(@SchemaName, 1);
EXEC tSQLt.NewTestClass @NewSchemaName;
SELECT @MigrateObjectsCommand = (
SELECT Cmd AS [text()] FROM (
SELECT 'ALTER SCHEMA ' + QUOTENAME(@NewSchemaName) + ' TRANSFER ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(name) + ';' AS Cmd
FROM sys.objects
WHERE schema_id = SCHEMA_ID(@SchemaName)
AND type NOT IN ('PK', 'F')
UNION ALL
SELECT 'ALTER SCHEMA ' + QUOTENAME(@NewSchemaName) + ' TRANSFER XML SCHEMA COLLECTION::' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(name) + ';' AS Cmd
FROM sys.xml_schema_collections
WHERE schema_id = SCHEMA_ID(@SchemaName)
UNION ALL
SELECT 'ALTER SCHEMA ' + QUOTENAME(@NewSchemaName) + ' TRANSFER TYPE::' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(name) + ';' AS Cmd
FROM sys.types
WHERE schema_id = SCHEMA_ID(@SchemaName)
) AS Cmds
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)');
EXEC (@MigrateObjectsCommand);
EXEC tSQLt.DropClass @SchemaName;
END;
---Build-
GO