如果select中的变量赋值返回多个值,是否可能引发错误?

Bra*_*ann 4 sql t-sql sql-server-2008

我刚刚在我的一个软件上发现了一个错误,我忘记了where子句.代码是这样的:

declare @foo bigint
declare @bar bigint
select @foo = foo, @bar=bar from tbFooBar
where (....a long list of condition goes there)
     (... and an extra condition should have went there but I forgot it)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我忘记的where子句在非常特殊的极端情况下很有用,代码经过了成功的测试.

最终,查询返回了两个值而不是一个,并且产生的错误是追踪的噩梦(因为它很难再现,并且根本不明显这个特定的存储过程导致了我们发现的问题)

如果@ foo = foo引发了异常而不是默默地从多行中分配第一个值,那么调试会容易得多.

为什么这样?我想不出这样一种情况,即人们实际上想要在不引发错误的情况下这样做(请记住条款'不同'和'顶'是有原因的)

如果出现这种情况,有没有办法让sql server 2008引发错误?

Mic*_*uen 9

试试这个:

declare @d datetime
select @d = arrived from attendance;
if @@ROWCOUNT > 1 begin
    RAISERROR('Was more than expected 1 row.', 16, 1)
end
Run Code Online (Sandbox Code Playgroud)