0

我正在尝试创建一个函数,该函数将遍历数据库中的所有表,如果它不存在则创建一个触发器。经过一些研究,我遇到了存储过程:“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 DateCreated=@getDateCreated,DateModified=@getDateModified
END   
GO
4

1 回答 1

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 DateCreated=@getDateCreated,DateModified=@getDateModified
END   
;'''

这 ?替换为表名。如果我没记错的话

于 2013-04-12T09:09:45.707 回答