代码之家  ›  专栏  ›  技术社区  ›  justcompile

@@identity是否返回主键或标识字段?

  •  3
  • justcompile  · 技术社区  · 15 年前

    我的问题是,我有一个SQL视图(MS SQL 2005)的更新触发器,我将它映射到C中的LINQ到SQL实体……

    我的SQL看起来是正确的,但它抱怨试图在辅助表pk字段中插入一个空值。

    我认为我的问题与将主键和标识作为主表中的单独字段有关。所以我的问题是……当使用@@Identity时,它是查看插入行的主键,还是查看指定了“Identity”的字段????

    3 回复  |  直到 14 年前
        1
  •  12
  •   Thomas    15 年前

    @@IDENTITY 仅返回上次插入的标识值。它不知道该值是在主键列中使用的,还是对于给定的列来说是唯一的。而不是使用 @身份 ,您应该使用 SCOPE_IDENTITY() 尤其是当你有了触发器。@@标识只关心具有标识属性的列(表中只能有一个列)。表是否有主键以及pk是否为标识列没有区别。

    SCOPE_IDENTITY 更多。

        2
  •  2
  •   kemiller2002    15 年前

    你想用 SELECT SCOPE_IDENTITY() 而不是 @@Identity

        3
  •  0
  •   Philip Kelley    15 年前

    @@标识始终引用标识列,而不是表的主键。(如果它是一个复合主键,该如何工作?)正如托马斯所说,由于您使用的是触发器,所以您可能应该使用scope_identity()。