我读过很多文章,比如
What are the magic tables available in SQL Server 2000?
http://www.consultmachine.com/2017/07/06/magic-tables-in-sql-server/
https://www.codeproject.com/Questions/285423/what-is-magic-table-different-types-of-magic-table
但是没有人能够探索魔法表的非触发器,我从一周开始挣扎。
答案 0 :(得分:0)
以下是一些使用OUTPUT子句的几个例子,没有使用触发器...
USE AlignDev;
GO
IF OBJECT_ID('tempdb..#ChangeTracking', 'U') IS NULL
BEGIN -- DROP TABLE #ChangeTracking
CREATE TABLE #ChangeTracking (
ChangeDT DATETIME NOT NULL DEFAULT (GETDATE()),
oID INT NULL,
nID INT NULL,
oCol_1 VARCHAR(10) NULL,
nCol_1 VARCHAR(10) NULL,
oCol_2 VARCHAR(10) NULL,
nCol_2 VARCHAR(10) NULL,
oCol_3 VARCHAR(10) NULL,
nCol_3 VARCHAR(10) NULL
);
END;
IF OBJECT_ID('tempdb..#TestData', 'U') IS NULL
BEGIN -- DROP TABLE #TestData
CREATE TABLE #TestData (
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
Col_1 VARCHAR(10) NULL,
Col_2 VARCHAR(10) NULL,
Col_3 VARCHAR(10) NULL
);
END
--=================================================================
INSERT #TestData (Col_1, Col_2, Col_3)
OUTPUT Inserted.* INTO #ChangeTracking (nID, nCol_1, nCol_2, nCol_3)
SELECT 'abc', 'def', 'ghi' UNION ALL
SELECT 'jkl', 'mno', '123' UNION ALL
SELECT '346', '789', 'qaz' UNION ALL
SELECT 'wsx', 'edc', 'rfv' UNION ALL
SELECT 'tgb', 'yhn', 'ujm' UNION ALL
SELECT 'plm', 'uhb', 'tfc';
-- see what's been captured so far...
SELECT * FROM #TestData td;
SELECT * FROM #ChangeTracking ct;
------------------------------------------------
UPDATE td SET
td.Col_1 = 'xxx',
td.Col_3 = 'zzz'
OUTPUT Deleted.*, Inserted.*
INTO #ChangeTracking (oID, oCol_1, oCol_2, oCol_3, nID, nCol_1, nCol_2, nCol_3)
FROM
#TestData td
WHERE
td.ID IN (2, 4, 6);
-- see what's been captured so far...
SELECT * FROM #TestData td;
SELECT * FROM #ChangeTracking ct;
------------------------------------------------
DELETE td
OUTPUT Deleted.* INTO #ChangeTracking ( oID, oCol_1, oCol_2, oCol_3)
FROM
#TestData td;
-- see what's been captured so far...
SELECT * FROM #TestData td;
SELECT * FROM #ChangeTracking ct;
HTH, 杰森