从select语句中分配变量

时间:2011-06-06 05:14:54

标签: sql tsql select variable-assignment

请有人告诉我。

哪种语法正确?

DECLARE @TotalRows INT
SET @TotalRows = (SELECT COUNT(*) FROM MyTable WHERE MyID = Value)

OR

DECLARE @TotalRows INT
SELECT @TotalRows = COUNT(*) FROM MyTable WHERE MyID = Value

甚至重要吗?

1 个答案:

答案 0 :(得分:3)

Difference between set vs select

  1. SET是变量赋值的ANSI标准,SELECT不是。
  2. SET一次只能分配一个变量,SELECT可以一次分配多个。
  3. 如果从查询中分配,SET只能分配标量值。如果查询返回多个值/行,则SET将引发错误。 SELECT会将其中一个值分配给变量,并隐藏返回多个值的事实(因此您可能永远不会知道其他地方出现问题的原因 - 请对其进行故障排除)
  4. 当从查询中分配时,如果没有返回值,则SET将分配NULL,其中SELECT将根本不进行赋值(因此变量不会从其先前的值更改)
  5. 就速度差异而言 - SET和SELECT之间没有直接的区别。然而,SELECT能够在一次拍摄中进行多次任务确实比它具有轻微的速度优势。