Вопрос:
Из-за времени выполнения я хочу присвоить столбцам однострочного набора результатов сразу нескольким переменным в хранимой процедуре SQL-Server. Я хочу заменить последние 2 строки следующего кода:
Declare @A int Declare @B int Select @A = (Select Col1 From Table1 Where ID=1234) Select @B = (Select Col2 From Table1 Where ID=1234)
Так как в этой версии программа будет искать дважды для ID = 1234, я хочу сделать что-то вроде
Select @A, @B = (Select Col1, Col2 From Table1 Where ID=1234)
Но я не могу понять правильный синтаксис для этого.
Лучший ответ:
Вы можете сделать это
Select @A =Col1,@B=Col2 From Table1 Where ID=1234 Ответ №1
Просто запятая разделяет их и имеет назначения непосредственно в SELECT а не используя подзапрос:
Select @A = Col1,@B = Col2 From Table1 Where ID=1234
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression } [ ,…n ] [ ; ]
Где [,…n] означает, что вы можете повторять предыдущую часть столько раз, сколько хотите, разделяя каждое повторение запятой.
Ответ №2
Для отдельной инструкции присваивания вам необходимо использовать SET
DECLARE @A INT DECLARE @B INT SET @A = (SELECT Col1 FROM Table1 WHERE ID = 1234) SET @B = (SELECT Col2 FROM Table1 WHERE ID = 1234)
Для одного оператора присваивания вы можете использовать
SELECT @A = Col1, @B = Col2 FROM Table1 WHERE ID = 1234 Ответ №3
Вы хотите использовать курсор для итерации над набором данных, даже если он содержит только одну строку. См.