我的问题是我在SQL视图(MS SQL 2005)上有更新触发器,我在C#中映射到LINQ to SQL实体...
我的SQL看起来是正确的,但它抱怨尝试将空值插入辅助表PK字段。
我认为我的问题涉及将主键和标识作为主表中的单独字段。所以我的问题是......当使用@@ identity时,它是否会查看插入行的主键,或者是否看到指定了“IDENTITY”的字段???
答案 0 :(得分:12)
@@IDENTITY
仅返回上一次插入的标识值。它不知道该值是否在主键列中使用,或者即使它对于给定列是唯一的。您应该使用@@IDENTITY
,而不是使用SCOPE_IDENTITY()
,尤其是如果您有触发器。 @@ IDENTITY只关心具有IDENTITY属性的列(表中只能有一个)。表是否具有主键以及PK是否为标识列没有区别。
有关详情,请参阅SCOPE_IDENTITY。
答案 1 :(得分:2)
您想使用SELECT SCOPE_IDENTITY()
代替@@Identity
答案 2 :(得分:0)
@@ IDENTITY始终引用标识列,而不是表的主键。 (如果它是复合主键,它将如何工作?)正如托马斯所说,由于你正在使用触发器,你可能应该使用SCOPE_IDENTITY()。