-
Notifications
You must be signed in to change notification settings - Fork 113
Expand file tree
/
Copy pathtSQLt.Private_NoTransactionHandleTable.ssp.sql
More file actions
104 lines (103 loc) · 4.6 KB
/
tSQLt.Private_NoTransactionHandleTable.ssp.sql
File metadata and controls
104 lines (103 loc) · 4.6 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
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
IF OBJECT_ID('tSQLt.Private_NoTransactionHandleTable') IS NOT NULL DROP PROCEDURE tSQLt.Private_NoTransactionHandleTable;
GO
---Build+
GO
CREATE PROCEDURE tSQLt.Private_NoTransactionHandleTable
@Action NVARCHAR(MAX),
@FullTableName NVARCHAR(MAX),
@TableAction NVARCHAR(MAX)
AS
BEGIN
DECLARE @cmd NVARCHAR(MAX);
BEGIN TRY
IF (OBJECT_ID(@FullTableName) IS NULL AND @TableAction <> 'Hide')
BEGIN
RAISERROR('Table %s does not exist.',16,10,@FullTableName);
END;
IF (@Action = 'Save')
BEGIN
IF (@TableAction = 'Restore')
BEGIN
IF(NOT EXISTS(SELECT 1 FROM #TableBackupLog TBL WHERE TBL.OriginalName = @FullTableName))
BEGIN
DECLARE @NewQuotedNameForBackupTable NVARCHAR(MAX) = '[tSQLt].'+QUOTENAME(tSQLt.Private::CreateUniqueObjectName());
SET @cmd = 'SELECT * INTO '+@NewQuotedNameForBackupTable+' FROM '+@FullTableName+';';
EXEC (@cmd);
INSERT INTO #TableBackupLog (OriginalName, BackupName) VALUES (@FullTableName, @NewQuotedNameForBackupTable);
EXEC tSQLt.Private_MarktSQLtTempObject @ObjectName = @NewQuotedNameForBackupTable, @ObjectType = N'TABLE', @NewNameOfOriginalObject = NULL;
END;
END;
ELSE IF (@TableAction = 'Hide')
BEGIN
IF (NOT EXISTS (SELECT 1 FROM tSQLt.Private_RenamedObjectLog ROL WHERE QUOTENAME(OBJECT_SCHEMA_NAME(ROL.ObjectId))+'.'+OriginalName COLLATE DATABASE_DEFAULT = @FullTableName))
BEGIN
IF(OBJECT_ID(@FullTableName) IS NULL)
BEGIN
RAISERROR('Table %s does not exist.',16,10,@FullTableName);
END;
EXEC tSQLt.RemoveObject @ObjectName = @FullTableName;
END;
END;
ELSE IF (@TableAction IN ('Truncate', 'Ignore'))
BEGIN
RETURN;
END;
ELSE
BEGIN
RAISERROR('Invalid @TableAction parameter value.',16,10);
END;
END;
ELSE IF (@Action = 'Reset')
BEGIN
IF (@TableAction = 'Restore')
BEGIN
BEGIN TRAN;
DECLARE @BackupTableName TABLE(TableName NVARCHAR(MAX));
DELETE FROM #TableBackupLog OUTPUT DELETED.BackupName INTO @BackupTableName WHERE OriginalName = @FullTableName;
IF(EXISTS(SELECT 1 FROM @BackupTableName AS BTN))
BEGIN
SET @cmd = 'DELETE FROM ' + @FullTableName + ';';
IF (EXISTS(SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(@FullTableName) AND is_identity = 1))
BEGIN
SET @cmd = @cmd + 'SET IDENTITY_INSERT ' + @FullTableName + ' ON;';
END;
SET @cmd = @cmd + 'INSERT INTO ' + @FullTableName +'(';
DECLARE @ColumnList NVARCHAR(MAX) = STUFF((SELECT ','+QUOTENAME(name) FROM sys.columns WHERE object_id = OBJECT_ID(@FullTableName) AND is_computed = 0 ORDER BY column_id FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,'');
SET @cmd = @cmd + @ColumnList;
SET @cmd = @cmd + ') SELECT ' + @ColumnList + ' FROM ' + (SELECT TableName FROM @BackupTableName)+';';
EXEC(@cmd);
END;
COMMIT;
END;
ELSE IF (@TableAction = 'Truncate')
BEGIN
EXEC('DELETE FROM ' + @FullTableName +';');
END;
ELSE IF (@TableAction IN ('Ignore','Hide'))
BEGIN
/* Hidden tables will be restored by UndoTestDoubles. */
RETURN;
END;
ELSE
BEGIN
RAISERROR('Invalid @TableAction parameter value.', 16, 10);
END;
END;
ELSE
BEGIN
RAISERROR('Invalid @Action parameter value.',16,10);
END;
END TRY
BEGIN CATCH
DECLARE @ErrorLine INT = ERROR_LINE();
DECLARE @ErrorProcedure NVARCHAR(MAX) = ERROR_PROCEDURE();
DECLARE @ErrorMessage NVARCHAR(MAX) = ERROR_MESSAGE();
DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
DECLARE @ErrorState INT = ERROR_STATE();
RAISERROR('tSQLt is in an unknown state: Stopping execution. (%s | Procedure: %s | Line: %i)', @ErrorSeverity, @ErrorState, @ErrorMessage, @ErrorProcedure, @ErrorLine);
END CATCH;
END;
GO
--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--
--DECLARE @TempMsg58 NVARCHAR(MAX) = FORMATMESSAGE('HandleTable(58) - @BackupTableName = %s, @FullTableName = %s, XACT_STATE = %i, SummaryError = %i',(SELECT TableName FROM @BackupTableName), @FullTableName, XACT_STATE(), CAST((SELECT PGC.Value FROM tSQLt.Private_GetConfiguration('SummaryError') AS PGC) AS INT));RAISERROR(@TempMsg58, 0,1) WITH NOWAIT;
--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--XX--