输出插入.Id在失败时不会抛出错误?

时间:2013-12-03 10:29:03

标签: sql-server-2012 output

我有几个表具有GUID作为唯一标识符。因此我使用'OUTPUT插入。

Id'方法返回插入的id。

除非插入因任何原因失败(在本例中为FK约束),否则这种方法非常有效。我没有得到关于失败查询的任何反馈,它只是继续,好像什么也没发生。

我的查询或代码中没有任何try-catch块,因此查询应该(至少在我看来)会抛出错误。

我试图在同一个查询中自己引发错误,但什么都没发生。 我还尝试删除'OUTPUT inserted.Id',然后查询引发错误。构建一个包含和不包含事务的try-catch块也无济于事。

我正在使用SQL Server 2012,并且正在使用c#.NET 4.0(VS2012)进行开发。

示例查询

INSERT INTO Customer (Name, City, Country) OUTPUT inserted.Id VALUES ('John', 'London', 'UK');

表格布局

Id uniqueidentifier (Primary Key) Default (newid()), 
Name varchar(50), 
City varchar(50), 
Country varchar(2)

根据我在网上发现的样本,它应该引发错误,我在这里做错了什么?我是否错过了SQL Server中的设置?

1 个答案:

答案 0 :(得分:1)

原来我在我的代码中使用了错误的方法。我正在使用

SqlCommand com = new SqlCommand("...");
com.ExecuteReader()

虽然我应该使用

SqlCommand com = new SqlCommand("...");
com.ExecuteScalar()

根据Microsoft支持员工(以及他提到的文档),这是这些方法的正确行为,即使它不是预期的。