0
目前我正在使用SQL Server觸發器來識別表上的插入,更新和刪除操作。創建SQL Server觸發器 - 動態SQL太長
表可以在數據庫中動態創建,因此當發生這種情況時,我需要動態地創建觸發器。
因此,此時我調用一個存儲過程並傳入表名。
CREATE PROCEDURE [dbo].[AUDIT_CreateTableTrigger]
@STR_TableName NVARCHAR(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @STR_Trig NVARCHAR(MAX) = ''
SET @STR_Trig = @STR_Trig + '
CREATE TRIGGER [dbo].[' + @STR_TableName + '_Audit] ON [dbo].[' + @STR_TableName + ']
WITH EXECUTE AS CALLER AFTER
INSERT, UPDATE, DELETE AS
BEGIN
-- do the insert stuff
-- update
-- + delete
END'
EXEC (@STR_Trig) -- then execute the sql
我的問題是,我注意到,exec並沒有完全讀取語句,並關閉了程序。我需要一種執行一長段SQL代碼的方法(我有一個解決方案,這涉及到將動態SQL分成3個觸發器,即插入,更新和刪除以解決此問題,但是寧願保留1個觸發器處理所有)
任何建議,將不勝感激,謝謝
怎麼你說的字符串被截斷?你確定'SET @STR_Trig = @STR_Trig + ..'這是你如何執行。 –
我已經看到在這裏完成的方法由martin smith回答http://stackoverflow.com/questions/12639948/sql-nvarchar-and-varchar-limits向下滾動到如何解決您遇到的問題。 –
因此'SET @STR_Trig = @STR_Trig + ..'這個方法字符串永遠不會被截斷。不要使用'Print'語句來檢查動態字符串,它會截斷顯示字符串。在你的情況下,它只能顯示'4000'字符 –