ms 觸發器 及 主鍵生成方式問題
--判斷觸發器是否存在如果存在就刪除
IF EXISTS (SELECT name FROM sysobjects
WHERE name='TRICARRIGE' AND type='TR')
DROP TRIGGER TRICARRIGE
go
CREATE TRIGGER [TRICARRIGE]
ON [dbo].[T_table]
AFTER INSERT,UPDATE,DELETE
AS
BEGIN
--插入
IF EXISTS (SELECT 1 FROM inserted) AND NOT EXISTS (SELECT 1 FROM deleted)
BEGIN
INSERT INTO T_DEST_BACKUP
SELECT i.ID,'T_DEST_TABLE','A',i.GID FROM inserted i
END
--更新
IF EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
BEGIN
INSERT INTO T_DEST_BACKUP
SELECT i.ID,'T_DEST_TABLE',
CASE WHEN i.ACTIVATE = 1
THEN 'U'
WHEN i.ACTIVATE = 0
THEN 'D'
ELSE ''
END,i.GID
FROM inserted i
END
--刪除
IF NOT EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
BEGIN
INSERT INTO T_DEST_BACKUP
SELECT d.ID,'T_DEST_TABLE','D',d.GID FROM deleted d
END
SET NOCOUNT ON;
END
GO
之前項目中的這種主鍵生成方式是不安全滴
<insert id="inserUser" parameterClass="userBean" >
<![CDATA[ insert into T_TABLE(NAME) values (#name:NVARCHAR#)]]>
<selectKey resultClass="int" keyProperty="id" >
select @@IDENTITY as id
</selectKey>
</insert>
之後更改成 下面 就解決了主鍵不一致的問題
<insert id="inserUser" parameterClass="userBean" >
<selectKey resultClass="int" keyProperty="id" >
<![CDATA[
insert into T_TABLE(NAME) values (#name:NVARCHAR#)
select SCOPE_IDENTITY() as id
]]>
</selectKey>
</insert>