我正在使用SQL Server 2008.我创建了以下表模式。
CREATE TABLE DIVISION_DETAILS
(
DIVISION_CODE NVARCHAR(36),
DIVISION_ID NVARCHAR(20),
DIVISION_NAME NVARCHAR(100),
CREATED_BY NVARCHAR(100),
CREATED_DATE DATETIME,
UPDATED_BY NVARCHAR(100),
UPDATED_DATE DATETIME,
ROW_VERSION TIMESTAMP,
CONSTRAINT PK_DIV_CODE PRIMARY KEY(DIVISION_CODE)
);
现在我需要创建一个触发器,以便在应用程序插入其他行时自动插入或更新某些字段。到目前为止,我已创建了以下触发器,但它无法正常工作。你能帮我这方面吗?
CREATE TRIGGER TRG_DIVSION_DETAILS_INS_UPD
ON DIVISION_DETAILS
AFTER INSERT, UPDATE
AS BEGIN
IF DIVISION_CODE IS NULL
THEN DIVISION_CODE=NEW GUID()
END IF
IF ROW_VERSION IS NULL
THEN ROW_VERSION=NEW DATE()
END IF
END
非常感谢你。
答案 0 :(得分:0)
了解Using the inserted and deleted tables。
使用的一个例子
inserted
或deleted
表可以是:
IF EXISTS (SELECT 1 FROM INSERTED)
UPDATE DIVISION_DETAILS
SET UpdatedDate = GETDATE()
FROM DIVISION_DETAILS DD
INNER JOIN INSERTED i ON DD.Division_Code = i.Division_Code
主键不能为空,因此您永远不必检查Division_Code是否为空。
uniqueidentifier
。您在触发器代码中显示的内容不需要触发器。它可以通过使列NOT NULL并为它们提供默认值来完成它们将在插入时提供NULL时为默认值:
CREATE TABLE DIVISION_DETAILS
(
Division_Code uniqueidentifier NOT NULL PRIMARY KEY DEFAULT(NEWID()),
/*...*/
Created_Date datetime NOT NULL DEFAULT(GETDATE()),
Updated_Date datetime NOT NULL DEFAULT(GETDATE()),
Row_Version timestamp NOT NULL
)
timestamp
列自动生成其值
nvarchar
类型。