亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

SQL Server觸發器Trigger(4)

標簽:
SQL Server

对于例子http://www.cnblogs.com/insus/articles/1921465.html写的触发器有bug,当使用http://www.cnblogs.com/insus/articles/1921618.html例子中的INSERT VALUES的语法头两种插入记录时,[Num]字段只做更第一笔,其他[Num]值均为NULL,


解决办法,只好修改触发器,代码如下,

代码

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[tri_OrderDemo_Insert] ON [dbo].[OrderDemo]
AFTER INSERT
AS
--创建一个临时表
IF OBJECT_ID ('tempdb.dbo.#T') IS NOT NULL DROP TABLE dbo.#T
--把所有添加记录都插入这个临时表中
SELECT * INTO dbo.#T FROM inserted 

--宣告变量@MinKey为每次插入记录最初主键,@MaxKey为最后一个主键,@NumValue为[Num]字段值
DECLARE @MinKey INT,@MaxKey INT,@NumValue INT
--在临时表中找到最小主键和最大主键
SELECT @MinKey = MIN([OrderDemoId]), @MaxKey = MAX([OrderDemoId]) FROM dbo.#T

--如果是第一次有记录插入表
IF (@MinKey = 1)
    --[Num]字段值等于主键值
    SET @NumValue = @MinKey 
ELSE
    BEGIN   
        --如果表[OrderDemo]已经有记录存在,找到最大值的从字段[Num]
        SELECT @NumValue =  MAX([Num])  FROM [dbo].[OrderDemo]
        --并加上1
        SET @NumValue = @NumValue + 1        
    END

--循环插入的记录
WHILE @MinKey <= @MaxKey 
BEGIN
    --更新新插入记录的[Num]字段值。
    UPDATE [dbo].[OrderDemo] SET [Num] = @NumValue WHERE [OrderDemoId]  = @MinKey 
    SET @MinKey = @MinKey + 1
    SET @NumValue = @NumValue + 1
END

 

 

 

 

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
18
獲贊與收藏
136

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消