forked from tSQLt-org/tSQLt
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtSQLt.AssertEqualsTableSchema.ssp.sql
More file actions
48 lines (47 loc) · 2.06 KB
/
Copy pathtSQLt.AssertEqualsTableSchema.ssp.sql
File metadata and controls
48 lines (47 loc) · 2.06 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
IF OBJECT_ID('tSQLt.AssertEqualsTableSchema') IS NOT NULL DROP PROCEDURE tSQLt.AssertEqualsTableSchema;
GO
---Build+
GO
CREATE PROCEDURE tSQLt.AssertEqualsTableSchema
@Expected NVARCHAR(MAX),
@Actual NVARCHAR(MAX),
@Message NVARCHAR(MAX) = NULL
AS
BEGIN
INSERT INTO tSQLt.Private_AssertEqualsTableSchema_Expected([RANK(column_id)],name,system_type_id,user_type_id,max_length,precision,scale,collation_name,is_nullable)
SELECT
RANK()OVER(ORDER BY C.column_id),
C.name,
CAST(C.system_type_id AS NVARCHAR(MAX))+QUOTENAME(TS.name) system_type_id,
CAST(C.user_type_id AS NVARCHAR(MAX))+CASE WHEN TU.system_type_id<> TU.user_type_id THEN QUOTENAME(SCHEMA_NAME(TU.schema_id))+'.' ELSE '' END + QUOTENAME(TU.name) user_type_id,
C.max_length,
C.precision,
C.scale,
C.collation_name,
C.is_nullable
FROM sys.columns AS C
JOIN sys.types AS TS
ON C.system_type_id = TS.user_type_id
JOIN sys.types AS TU
ON C.user_type_id = TU.user_type_id
WHERE C.object_id = OBJECT_ID(@Expected);
INSERT INTO tSQLt.Private_AssertEqualsTableSchema_Actual([RANK(column_id)],name,system_type_id,user_type_id,max_length,precision,scale,collation_name,is_nullable)
SELECT
RANK()OVER(ORDER BY C.column_id),
C.name,
CAST(C.system_type_id AS NVARCHAR(MAX))+QUOTENAME(TS.name) system_type_id,
CAST(C.user_type_id AS NVARCHAR(MAX))+CASE WHEN TU.system_type_id<> TU.user_type_id THEN QUOTENAME(SCHEMA_NAME(TU.schema_id))+'.' ELSE '' END + QUOTENAME(TU.name) user_type_id,
C.max_length,
C.precision,
C.scale,
C.collation_name,
C.is_nullable
FROM sys.columns AS C
JOIN sys.types AS TS
ON C.system_type_id = TS.user_type_id
JOIN sys.types AS TU
ON C.user_type_id = TU.user_type_id
WHERE C.object_id = OBJECT_ID(@Actual);
EXEC tSQLt.AssertEqualsTable 'tSQLt.Private_AssertEqualsTableSchema_Expected','tSQLt.Private_AssertEqualsTableSchema_Actual',@Message=@Message,@FailMsg='Unexpected/missing column(s)';
END;
GO