由于FK违规,将数据INSERT到两个表失败

时间:2013-02-24 06:34:05

标签: c# sql-server sql-server-2008 ado.net transactions

我创建了一个如下所示的存储过程:

INSERT DATA INTO TABLE_1 VALUES ('xx', 'yy', 'zz')
SET @id = @@identity

INSERT DATA INTO TABLE_2 VALUES (@id, 'text') -- throws exception

我用C#代码调用它,它包含在SqlTransaction内。问题是,它总是在第二个INSERT中抛出The INSERT statement conflicted with the FOREIGN KEY constraint

我调试了这个存储过程,它显示错误来自第二个插入语句。 @id设置正确。

我已经在TABLE_1中插入了数据,并获得了新的ID。我不明白为什么它仍然会抛出异常。

更新

表格结构:

Table_1
id(int) PK
name_1 varchar(10)
name_2 varchar(10)
name_3 varchar(10)

Table_2
id(int) PK, FK to Table_1.id
text_1 varchar(10)

1 个答案:

答案 0 :(得分:1)

一些建议:

  1. 尝试在INSERT语句中指定列名称,以便在重新排列列顺序时不会搞砸。
  2. 使用SCOPE_IDENTITY()代替@@IDENTITY来检索新生成的标识。您可以阅读他们的差异here