• SCOPE_IDENTITY、IDENT_CURRENT 、@@IDENTITY


    测试表的Dragon_Cate设计如图:

     

    其中CateID是一个自增量为1的主键。

     

    相应的添加记录的存储过程为:

    CREATE PROCEDURE [dbo].[Dragon_Cate_Add]

    (

        @CateName nvarchar(20),

        @CateIntro nvarchar(50),

        @Depth int,

        @SortOrder int,

        @Path varchar(50),

        @Visible bit

    )

    AS

    BEGIN

        INSERT INTO [Dragon_Cate]

    (

        [CateName],

        [CateIntro],

        [Depth],

        [SortOrder],

        [Path],

        [Visible]

    )

    VALUES

    (

        @CateName,

        @CateIntro,

        @Depth,

        @SortOrder,

        @Path,

        @Visible

    )

        --分别以以下三种类型做测试

        --SELECT Ident_current('Dragon_Cate')

        --SELECT @@IDENTITY

    --SELECT SCOPE_IDENTITY()

    END

    测试结果表明,如果表’Dragon_Cate’没有触发器或其他扩展时候(单单在‘Dragon_Cate’这个作用域中),三种类型返回的值都是一样的。

     

    现在扩大一下作用域, ’Dragon_Cate’增加触发器如下:

    CREATE TRIGGER testTrigger

       ON Dragon_Cate

       AFTER INSERT

    AS

    BEGIN

        SET NOCOUNT ON 

        Insert into Dragon_Notice(NoticeContent,PubDate,Visible,Latest,SortOrder)

        values('abc',getDate(),1,1,1)

    END

    这个触发器在为’Dragon_Cate’表增加一条记录后触发,为表’Dragon_Notice’增加一条记录,这里的表’Dragon_Notice’’Dragon_Cate’的设计是一样的,也有一个自增类型的主键.

    测试结果表明

    SELECT Ident_current('Dragon_Cate')SELECT @@IDENTITY返回的是最后触发器里’Dragon_Notice’表返回的自增变量,

    而SELECT SCOPE_IDENTITY()返回的是’Dragon_Cate’的自增变量.

    得出的结果:

    SELECT Ident_current('Dragon_Cate')SELECT @@IDENTITY返回的应该是当前会话中任何作用域内的最后生成的 IDENTITY 列值,

    SELECT SCOPE_IDENTITY()只能返回当前会话和当前作用域内的最后生成的IDENTITY 列值

  • 相关阅读:
    "INVALID" is not a valid start token
    Win+R 快速启动程序
    assert False 与 try 结合 在开发中的使用
    token的分层图如下
    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError
    获取控制台的错误信息 onerror
    状态git
    icmp
    git commit前检测husky与pre-commit 提交钩子
    git diff
  • 原文地址:https://www.cnblogs.com/_dragon/p/1732519.html
Copyright © 2020-2023  润新知