zoukankan      html  css  js  c++  java
  • SQL Server触发器Trigger(4)

    对于例子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
  • 相关阅读:
    单行居中,2行居左,超过2行省略
    Angular2环境搭建
    数字保留2位小数
    结束循环函数
    获取元素的定位值
    $.extend
    node使用指南
    Telsa显卡比较
    Jupyter-notebook 不自动打开浏览器解决办法
    teamviewer连接未就绪的解决(Manjaro Linux)
  • 原文地址:https://www.cnblogs.com/insus/p/1922387.html
Copyright © 2011-2022 走看看