看看哪一行导致“INSERT语句与FOREIGN KEY冲突”?

时间:2016-05-26 21:46:30

标签: sql sql-server sql-server-2008 tsql

我有一张try...catch来表INSERT。像这样:

try
{
    sqlCommand.ExecuteNonQuery(conn, CommandType.Text, insertSql);
}
catch (Exception ex)
{
    throw ex;
}

在我插入的许多行中的一行中,有一行失败,错误 INSERT语句与FOREIGN KEY冲突。

这很好,但是Exception可以返回更多信息吗?也许它可以返回插入失败的值?

据我所知,这可以通过多种方式完成;我只是想知道我是否可以在不更改结构或stored procedure调用(即添加OUTPUT参数)和try...catch的情况下获取有关违规行的信息。

再次感谢。

4 个答案:

答案 0 :(得分:0)

请尝试以下操作。

String combiTop; //you don't have to assign values in your demonstration

ArrayList<String> = new ArrayList<String>(combiTop.length);
for (String s : combiTop) { // this iterates through each value in the array
    topRowValue.add(s);
}

答案 1 :(得分:0)

尝试 - 捕捉很好但不够。你需要找到令人反感的行。

begin try
insert...
select...
end try
begin catch
declare @badFK nvarchar(max)
select @badFK = (select fk_field from fk_table f
left join pk_table p on p.pk_field = f.fk_field
where p.pk_field is null
for xml auto,elements,root)
--raiserror as @vasmi recommend but include @badFK into message
end catch

答案 2 :(得分:0)

try
{
    sqlCommand.ExecuteNonQuery(conn, CommandType.Text, insertSql);
}
catch (Exception ex)
{
    throw new Exception(insertSql + Environment.NewLine +  ex.ToString());
}

答案 3 :(得分:0)

您对c#一无所知,但我认为您正在使用它。

在c#中你可以使用它:

try
{
 // bla bla bla
}
catch (SqlException ex)
{
 MessageBox.Show(es.ToString());
}

此错误将继续出现什么样的错误(可能是主键重复等等)