代码之家  ›  专栏  ›  技术社区  ›  Itay.B

T-Sql@@标识

  •  6
  • Itay.B  · 技术社区  · 14 年前

    @@Identity 当使用T-Sql时?

    像这样:

    set @Sql = "insert into table....values()..."
    exec @sql
    return @@Identity
    
    5 回复  |  直到 14 年前
        1
  •  3
  •   Joe White    14 年前
    INSERT INTO TableName (Field1, Field2, Field3) VALUES (1, 2, 3);
    SELECT SCOPE_IDENTITY();
    

    这是一个多语句批处理,因此我不确定每个客户机库是否都会以相同的方式返回值;例如,在classic ADO中,可能需要前进到下一个记录集才能读取值。但如果你用的是ADO.NET,我知道你可以用 ExecuteScalar SCOPE_IDENTITY 很好。

    decimal ,不是 int SCOPE_IDENTITY ,无论出于何种原因,键入为 numeric(38,0) . 所以您要么需要将ExecuteScalar结果强制转换为 十进制的 内景 ,或者你需要 SELECT CAST(SCOPE_IDENTITY() AS INT)

        2
  •  7
  •   Ken    14 年前

    您的隐式需求之一似乎是执行动态SQL。虽然我建议你不要这样做,但你可以用这个来完成你想要的:

    set @Sql = 'insert into table....values()...; select SCOPE_IDENTITY()'
    exec(@Sql)
    
        3
  •  5
  •   SLaks    14 年前

    这样地:

    INSERT INTO Table(...)
    OUTPUT INSERTED.IdColumn
    VALUES(...)
    
        4
  •  4
  •   EventHorizon    14 年前

    insert into tab (x,y,z) values (a,b,c); select @@identity
    

    返回的值是ID(使用ExecuteScalar)

        5
  •  1
  •   Azhar    14 年前

    你可以用这个

    Insert into Table(Col2, Col3) 
    output inserted.Id
    values ('xyz', 'abc')
    

    在哪里? Id