Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Описка в коде или присвоение значения переменной  [new]
stavelot
Member

Откуда:
Сообщений: 358
Разгребал старый чужой код SQL Server 2005, наткнулся вот на такое в процедуре:

SET NOCOUNT On
DECLARE @var1 DATETIME

SET ROWCOUNT 0

IF @TempKey IS NOT NULL AND @ACC IS NOT NULL BEGIN
	SELECT @var1 (SELECT synctime FROM TBLP WHERE TMPKEY = @tmpkey)
	IF @var1  is  NULL BEGIN ....


Интересует именно строка
SELECT @var1 (SELECT synctime FROM TBLP WHERE TMPKEY = @tmpkey)
здесь имеет место быть описка и пропущен знак равенства или все же другой замысел? Так как в моем понимании без знака равенства SQL Server интерпретирует это как два различных резалтсета и проверка переменной @var1 на NULL всегда будет истиной.
3 фев 14, 19:11    [15512514]     Ответить | Цитировать Сообщить модератору
 Re: Описка в коде или присвоение значения переменной  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
stavelot
Интересует именно строка
SELECT @var1 (SELECT synctime FROM TBLP WHERE TMPKEY = @tmpkey)

здесь имеет место быть описка и пропущен знак равенства или все же другой замысел? Так как в моем понимании без знака равенства SQL Server интерпретирует это как два различных резалтсета и проверка переменной @var1 на NULL всегда будет истиной.
Думаю, описка
3 фев 14, 21:01    [15512847]     Ответить | Цитировать Сообщить модератору
 Re: Описка в коде или присвоение значения переменной  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
stavelot,

красивый баг
еще и
SELECT synctime FROM TBLP WHERE TMPKEY = @tmpkey
может вернуть (в теории) несколько строк
4 фев 14, 09:54    [15514230]     Ответить | Цитировать Сообщить модератору
 Re: Описка в коде или присвоение значения переменной  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
StarikNavy
красивый баг
Это не ошибка, а следствие кривого стиля написания кода. Кто то научил плохому, или, может, никто ничему не учил :-)

Разве можно писать
SELECT @var1 = (SELECT synctime FROM TBLP WHERE TMPKEY = @tmpkey)

вместо
SELECT @var1 = synctime FROM TBLP WHERE TMPKEY = @tmpkey

Впрочем, левшу-самоучку видно и по другим признакам, допустим, нет указания схемы для объектов...
4 фев 14, 20:10    [15519185]     Ответить | Цитировать Сообщить модератору
 Re: Описка в коде или присвоение значения переменной  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
alexeyvg
Разве можно писать
SELECT @var1 = (SELECT synctime FROM TBLP WHERE TMPKEY = @tmpkey)

вместо
SELECT @var1 = synctime FROM TBLP WHERE TMPKEY = @tmpkey

Разве что если автор хотел, чтобы у него было гарантированное исключение при возврате подзапросом больше одной записи.
5 фев 14, 06:02    [15520209]     Ответить | Цитировать Сообщить модератору
 Re: Описка в коде или присвоение значения переменной  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
Сон Веры Павловны
Разве что если автор хотел, чтобы у него было гарантированное исключение при возврате подзапросом больше одной записи.
Ага, и даже не проверяет ошибку после SELECT :-)

Варианты конечно разные могут быть, но скорее всего тут всё таки не умышленное написание именно такой формы запроса.
5 фев 14, 10:55    [15520892]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить