ms 觸發器 及 主鍵生成方式問題

ms 觸發器 及 主鍵生成方式問題

項目需要 寫了個簡單的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
通過判斷 inserted 表 和 deleted 表來缺點是插入操作  下面語句的功能是把插入的數據備份到一臨時表裏面


--插入
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
在做觸法器的時候發現一個問題 ibatis的主鍵生成方式有好幾種
之前項目中的這種主鍵生成方式是不安全滴


  <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>
看出其中的區別了沒

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章