-
Notifications
You must be signed in to change notification settings - Fork 113
Expand file tree
/
Copy pathtSQLt.FakeTable.ssp.sql
More file actions
67 lines (56 loc) · 2.83 KB
/
tSQLt.FakeTable.ssp.sql
File metadata and controls
67 lines (56 loc) · 2.83 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
IF OBJECT_ID('tSQLt.FakeTable') IS NOT NULL DROP PROCEDURE tSQLt.FakeTable;
GO
---Build+
CREATE PROCEDURE tSQLt.FakeTable
@TableName NVARCHAR(MAX),
@SchemaName NVARCHAR(MAX) = NULL, --parameter preserved for backward compatibility. Do not use. Will be removed soon.
@Identity BIT = NULL,
@ComputedColumns BIT = NULL,
@Defaults BIT = NULL
AS
BEGIN
DECLARE @OrigObjectCleanQuotedSchemaName NVARCHAR(MAX);
DECLARE @OrigObjectCleanQuotedName NVARCHAR(MAX);
DECLARE @OrigObjectNewName NVARCHAR(4000);
DECLARE @OrigObjectFullName NVARCHAR(MAX) = NULL;
DECLARE @TargetObjectFullName NVARCHAR(MAX) = NULL;
DECLARE @OriginalObjectObjectId INT;
DECLARE @TargetObjectObjectId INT;
DECLARE @IsNode BIT = 0;
DECLARE @IsEdge BIT = 0;
IF(@TableName NOT IN (PARSENAME(@TableName,1),QUOTENAME(PARSENAME(@TableName,1)))
AND @SchemaName IS NOT NULL)
BEGIN
RAISERROR('When @TableName is a multi-part identifier, @SchemaName must be NULL!',16,10);
END
SELECT @OrigObjectCleanQuotedSchemaName = CleanSchemaName,
@OrigObjectCleanQuotedName = CleanTableName
FROM tSQLt.Private_ResolveFakeTableNamesForBackwardCompatibility(@TableName, @SchemaName);
EXEC tSQLt.Private_ValidateFakeTableParameters @OrigObjectCleanQuotedSchemaName,@TableName,@SchemaName;
SET @OrigObjectFullName = @OrigObjectCleanQuotedSchemaName + '.' + @OrigObjectCleanQuotedName;
-- Retrieve node and edge information for the original object
SELECT
@IsNode = is_node, @IsEdge = is_edge FROM sys.tables
WHERE [name] = PARSENAME(@OrigObjectFullName,1) AND schema_name([schema_id]) = PARSENAME(@OrigObjectFullName,2);
EXEC tSQLt.Private_RenameObjectToUniqueName @OrigObjectCleanQuotedSchemaName, @OrigObjectCleanQuotedName, @OrigObjectNewName OUTPUT;
SET @OriginalObjectObjectId = OBJECT_ID(@OrigObjectCleanQuotedSchemaName + '.' + QUOTENAME(@OrigObjectNewName));
SELECT @TargetObjectFullName = S.base_object_name
FROM sys.synonyms AS S
WHERE S.object_id = @OriginalObjectObjectId;
IF(@TargetObjectFullName IS NOT NULL)
BEGIN
IF(COALESCE(OBJECT_ID(@TargetObjectFullName,'U'),OBJECT_ID(@TargetObjectFullName,'V')) IS NULL)
BEGIN
RAISERROR('Cannot fake synonym %s as it is pointing to %s, which is not a table or view!',16,10,@OrigObjectFullName,@TargetObjectFullName);
END;
SET @TargetObjectObjectId = OBJECT_ID(@TargetObjectFullName);
END;
ELSE
BEGIN
SET @TargetObjectObjectId = @OriginalObjectObjectId;
END;
EXEC tSQLt.Private_CreateFakeOfTable @OrigObjectCleanQuotedSchemaName, @OrigObjectCleanQuotedName, @TargetObjectObjectId, @Identity, @ComputedColumns, @Defaults, @IsNode, @IsEdge;
EXEC tSQLt.Private_MarktSQLtTempObject @OrigObjectFullName, N'TABLE', @OrigObjectNewName;
END
---Build-
GO