Sql server 2008 是否可以使用sp_MSforeachtable过程在数据库中的所有表上创建触发器

Sql server 2008 是否可以使用sp_MSforeachtable过程在数据库中的所有表上创建触发器,sql-server-2008,triggers,Sql Server 2008,Triggers,我正在尝试创建一个函数,该函数将循环遍历数据库中的所有表,如果它不存在,则创建一个触发器。经过一些研究,我遇到了存储过程:“sp_MSforeachtable procedure”有人能帮我编写一段代码,使用下面的函数创建触发器吗?触发器工作正常,现在我需要确保它使用循环应用于所有表。注意,我不想在所有表上手动运行它。从性能角度看,我知道在数据库中的所有表上都使用触发器可能不是最好的主意。这是我的扳机 USE [Issue] GO SET ANSI_NULLS ON GO SET QUOTED_

我正在尝试创建一个函数,该函数将循环遍历数据库中的所有表,如果它不存在,则创建一个触发器。经过一些研究,我遇到了存储过程:“sp_MSforeachtable procedure”有人能帮我编写一段代码,使用下面的函数创建触发器吗?触发器工作正常,现在我需要确保它使用循环应用于所有表。注意,我不想在所有表上手动运行它。从性能角度看,我知道在数据库中的所有表上都使用触发器可能不是最好的主意。这是我的扳机

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

下面的代码没有经过测试,但应该是这样的

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   
;'''

那个?将替换为表名。如果我没记错的话

我得到了这个错误:Msg 102,级别15,状态1,第1行“+”附近的语法不正确,因为代码在所有表中循环。这意味着?不能是静态变量。是否正确?另一个错误:Msg 102,级别15,状态1,过程更新\u DateCreated\u DateModified,第12行“GO”附近的语法不正确。@kombo?替换为schema.table。您可以像在此处使用一样使用它:。试着用围棋代替围棋@kombo顺便说一句,这对于所有表都是例外的,不仅仅是dbo模式中的表。