Sql server 2008 为数据库中的所有表创建一个触发器
我想在数据库上创建触发器,首先检查是否存在类似的触发器,如果不存在,则创建它。对于数据库中任何表上的任何插入,它将填充该表上的DateCreated和DateModified列。我当前的触发器只在一个表上执行此操作。这是我的密码:Sql server 2008 为数据库中的所有表创建一个触发器,sql-server-2008,triggers,Sql Server 2008,Triggers,我想在数据库上创建触发器,首先检查是否存在类似的触发器,如果不存在,则创建它。对于数据库中任何表上的任何插入,它将填充该表上的DateCreated和DateModified列。我当前的触发器只在一个表上执行此操作。这是我的密码: USE [Issue] GO /****** Object: Trigger [dbo].[Update_DateCreated_DateModified] Script Date: 04/11/2013 12:07:41 ******/ SET ANSI_
USE [Issue]
GO
/****** Object: Trigger [dbo].[Update_DateCreated_DateModified] Script Date: 04/11/2013 12:07:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Nyname>
-- Create date: <Create ,10-04-13,>
-- Description: <Description,Add DateCreate and DateModifid for last records inserted,>
-- =============================================
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)
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
UPDATE dbo.Patient SET DateCreated=@getDateCreated,DateModified=@getDateModified
END
GO
你到底有什么问题?您需要为每个表创建一个触发器,以便获得表名列表,例如通过查询sys.tables,然后构建脚本。您可以在这里显示的TSQL中或在另一种语言的脚本中执行此操作。我想要的是在数据库中的所有表中循环,并创建我发布的触发器(如果它确实存在于任何表中)。从性能角度看,这似乎并不高效,但这是委托给我的任务。我想先让它发挥作用,然后试着说服我的老板这可能不是最好的方法。我真的不理解你的评论。如果您想向每个表添加一个触发器,那么您需要以某种方式在这些表上循环,因为createtrigger在一个表上为DML触发器创建一个触发器。我认为性能不应该是一个问题,因为这可能是一项一次性任务,尽管将来您可能应该将其作为开发过程的一部分,以便任何新表上都有触发器。@Pondlife我需要的是循环数据库中的所有表并创建触发器。但现在已经完成了。