試試這個:
CREATE PROCEDURE spLog
AS
SELECT * FROM #log
GO
DECLARE @t1 TABLE(ID INT IDENTITY(1, 1), Name NVARCHAR(MAX))
DECLARE @t2 TABLE(ID INT IDENTITY(1, 1), Name NVARCHAR(MAX))
create TABLE #log (ID INT, TableName NVARCHAR(MAX), Act NVARCHAR(MAX))
INSERT INTO @t1
OUTPUT Inserted.ID, '@t1', 'INSERT' INTO #log
VALUES('Table1 Value1')
INSERT INTO @t2
OUTPUT Inserted.ID, '@t2', 'INSERT' INTO #log
VALUES('Table2 Value1')
INSERT INTO @t1
OUTPUT Inserted.ID, '@t1', 'INSERT' INTO #log
VALUES('Table1 Value2')
UPDATE @t2
SET Name = 'New Name'
OUTPUT Inserted.ID, '@t2', 'UPDATE' INTO #log
DELETE
FROM @t1
OUTPUT deleted.ID, '@t1', 'DELETE' INTO #log
EXEC dbo.spLog
DROP TABLE #log
輸出:
ID TableName Act
1 @t1 INSERT
1 @t2 INSERT
2 @t1 INSERT
1 @t2 UPDATE
1 @t1 DELETE
2 @t1 DELETE
從2008年起,您可以創建用戶定義的表型,填充它,並傳遞給存儲proc:
CREATE TYPE LogTableType AS TABLE
(
ID INT,
TableName NVARCHAR(MAX), Act NVARCHAR(MAX)
)
GO
CREATE PROCEDURE spLog
@Log LogTableType READONLY
AS
SELECT * FROM @Log
GO
DECLARE @t1 TABLE(ID INT IDENTITY(1, 1), Name NVARCHAR(MAX))
DECLARE @t2 TABLE(ID INT IDENTITY(1, 1), Name NVARCHAR(MAX))
DECLARE @log LogTableType
INSERT INTO @t1
OUTPUT Inserted.ID, '@t1', 'INSERT' INTO @log
VALUES('Table1 Value1')
INSERT INTO @t2
OUTPUT Inserted.ID, '@t2', 'INSERT' INTO @log
VALUES('Table2 Value1')
INSERT INTO @t1
OUTPUT Inserted.ID, '@t1', 'INSERT' INTO @log
VALUES('Table1 Value2')
UPDATE @t2
SET Name = 'New Name'
OUTPUT Inserted.ID, '@t2', 'UPDATE' INTO @log
DELETE
FROM @t1
OUTPUT deleted.ID, '@t2', 'DELETE' INTO @log
EXEC dbo.spLog @log
看起來像很好的解決方案!我猜有沒有辦法在** SQL Server 2005 **(我的意思是表值SP)中做類似的事情? – 2015-03-13 13:37:14
@TimushevRoman,不幸的是。 – 2015-03-13 13:51:18