Я только что нашел ошибку в одном из моих программ, где я забыл предложение 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)
К сожалению, предложение where, которое я забыл, было полезно в очень специфических угловых случаях, и код успешно прошел тестирование.
В конце концов, запрос вернул двазначения вместо одного, и полученная ошибка была кошмаром для отслеживания (так как ее было очень трудно воспроизвести, и было совершенно не очевидно, что именно эта хранимая процедура вызывала обнаруженную нами проблему)
Отладка была бы намного проще, если бы @ foo = foo вызвал исключение вместо тихого присвоения первого значения из нескольких строк.
Почему это так?Я не могу вспомнить ситуацию, когда кто-то на самом деле хотел бы сделать это, не вызывая ошибки (имея в виду, что пункты «отдельный» и «верхний» существуют по причине)
И есть ли способзаставить sql server 2008 выдавать ошибку, если такая ситуация возникает?