zoukankan      html  css  js  c++  java
  • 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 列值

  • 相关阅读:
    二、网络基础
    Ado.net
    LINQ
    C#[抽象类,接口]
    自定义类库,并引用
    c#重点[封装,继承,多肽]
    c#重点[集合类型]异常,数组,集合ArrayList,List<>,hashTable,hashtable泛型(Dictionary)
    c#重点[数据类型,构造方法,变量,变量,运算符,装箱,拆箱]
    .net reflector激活
    sqlsever备份,还原和导入导出方法
  • 原文地址:https://www.cnblogs.com/_dragon/p/1732519.html
Copyright © 2011-2022 走看看