在 SQL Server 2008 R2 中,我希望创建一个模仿 OracleBEFORE INSERT
触发器行为的触发器,其中任何插入的触发器都会在持久化之前将 UPDATE_TS 和 CREATE_TS 更新为当前时间戳。
我现在看到的问题是错误:只能在使用列列表并且 IDENTITY_INSERT 为 ON 时指定表“MY_TABLE”中标识列的显式值
我不确定在触发器中打开 SET IDENTITY INSERT 表然后关闭 SET IDENTITY INSERT 表是否是个好主意。也许这是一个可能的解决方案。
请就最佳实践提出建议。
示例表称为 MY_TABLE:
CREATE TABLE [myschema].[MY_TABLE](
[MY_TABLE_ID] [bigint] IDENTITY(1,1) NOT NULL,
[FIELD_TO_UPDATE] [varchar](255) NOT NULL,
[CREATE_TS] [datetime] NULL,
[UPDATE_TS] [datetime] NULL),
PRIMARY KEY (MY_TABLE_ID))
扳机:
CREATE TRIGGER my_table_create_ts_trigger
ON [mydb].myschema.MY_TABLE
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO MY_TABLE([MY_TABLE_ID], [FIELD_TO_UPDATE], [CREATE_TS], [UPDATE_TS])
SELECT i.MY_TABLE_ID, i.FIELD_TO_UPDATE, GETDATE(), GETDATE()
FROM INSERTED as i
END