T-SQL使用单个select从表的行初始化几个变量

got*_*tqn 1 t-sql variables initialization sql-server-2012

我有下表(让我们说它的名字是"AnswerTable":

QuestionID Value
100        1
101        2
102        1
103        2
104        1
105        2
...
Run Code Online (Sandbox Code Playgroud)

然后我有几个变量:

DECLARE @Answer1 INT
DECLARE @Answer2 INT
....
Run Code Online (Sandbox Code Playgroud)

我需要从表中检索信息,如下所示:

SET @Answer1 =(SELECT Value FROM AnswerTable WHERE QuestionID=100)
SET @Answer2 =(SELECT Value FROM AnswerTable WHERE QuestionID=101)
...
Run Code Online (Sandbox Code Playgroud)

我想要做的是只用表中的一个select来初始化变量,因为在我的实际情况下,表非常大,并且它与其他表连接,我担心子查询的多次执行不会要有效率.

是否有捷径可寻?

Kaf*_*Kaf 5

一般来说;

SELECT @Answer1 = col1, @Answer2 = col2, ... FROM yourTable
Run Code Online (Sandbox Code Playgroud)

在你的情况下;

SELECT @Answer1 = case QuestionID when 100 then Value Else @Answer1 End, 
       @Answer2 = case QuestionID when 101 then Value Else @Answer2 End
FROM AnswerTable
WHERE QuestionID IN  (100,101)
Run Code Online (Sandbox Code Playgroud)

例如: Sql小提琴示例