2013-04-12 16 views
0

我試圖通過在數據庫中的所有表創建一個函數,將循環,並創建一個觸發,如果它不exist.After一些研究,我來了整個商店過程:「sp_MSforeachtable過程」有人可以幫我一個代碼,將使用函數來創建下面的觸發器。觸發器工作正常,現在我需要確保它使用循環應用於所有表。 NB我不想在所有表上手動運行它。性能方面,我知道在數據庫中的所有表上觸發器可能不是最好的辦法。這裏是我的觸發器它是更多鈔票,以在數據庫中使用sp_MSforeachtable程序創建觸發所有表

USE [Issue] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TRIGGER [dbo].[Update_DateCreated_DateModified] 
ON [dbo].[Patient] 
FOR INSERT 
AS 
BEGIN 
DECLARE @getDateCreated Datetime = GETDATE() 
DECLARE @getDateModified DATETIME=GETDATE() 
DECLARE @patient_nin VARCHAR(50) = (SELECT NIN FROM INSERTED i) 
SET NOCOUNT ON; 
UPDATE dbo.Patient SET [email protected],[email protected] 
END 
GO 

回答

1

下面的代碼沒有經過測試,但它應該是這樣的。

EXEC sp_MSforeachtable 'IF NOT EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''?_Update_DateCreated_DateModified'')) 
EXEC dbo.sp_executesql @statement = 
N''CREATE TRIGGER [dbo].[?_Update_DateCreated_DateModified] 
ON ? 
FOR INSERT 
AS 
BEGIN 
DECLARE @getDateCreated Datetime = GETDATE() 
DECLARE @getDateModified DATETIME=GETDATE() 
DECLARE @patient_nin VARCHAR(50) = (SELECT NIN FROM INSERTED i) 
SET NOCOUNT ON; 
UPDATE ? SET [email protected],[email protected] 
END 
;''' 

The?被替換爲表名。如果我沒有記錯

+0

我得到這個錯誤:消息102,級別15,狀態1,線附近的「+」 1級 不正確的語法。 – kombo

+0

@kombo再試一次,因爲我已經將代碼通過所有的tables.It循環是指編輯它 –

+0

,?不能是靜態變量。是這樣嗎? – kombo

相關問題