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

时间:2010-05-12 14:19:13

标签: c# sql linq-to-sql

我的问题是我在SQL视图(MS SQL 2005)上有更新触发器,我在C#中映射到LINQ to SQL实体...

我的SQL看起来是正确的,但它抱怨尝试将空值插入辅助表PK字段。

我认为我的问题涉及将主键和标识作为主表中的单独字段。所以我的问题是......当使用@@ identity时,它是否会查看插入行的主键,或者是否看到指定了“IDENTITY”的字段???

3 个答案:

答案 0 :(得分:12)

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

有关详情,请参阅SCOPE_IDENTITY

答案 1 :(得分:2)

您想使用SELECT SCOPE_IDENTITY()代替@@Identity

答案 2 :(得分:0)

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