SET与SELECT - 有什么区别?

Ste*_*nan 39 t-sql performance functional-programming

有人可以确定T-SQL 之间SET和之间的功能/性能差异(如果有的话)SELECT吗?我应该在什么条件下选择一个?


更新:
感谢所有回复的人.正如一些人所指出的那样,Narayana Vyas Kondreddi的这篇文章有很多好消息.我也仔细阅读网上阅读文章之后,发现这个被精简版瑞安法利它提供了亮点,以为我会分享:

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

TSt*_*per 27

SET是为变量赋值的ANSI标准方法,而SELECT则不是.但您可以使用SELECT一次为多个变量赋值.SET允许您一次仅将数据分配给一个变量.因此,在性能方面,SELECT将成为赢家.

有关更多详细信息和示例,请参阅:将值分配给变量时,SET和SELECT之间的差异


Mit*_*eat 7

SQL Server:必须使用SELECT的一种情况是分配@@ ERROR和@@ ROWCOUNT,因为这些必须在同一语句中设置(否则它们会被重置):

SELECT @error = @@ERROR, @rowcount = @@ROWCOUNT
Run Code Online (Sandbox Code Playgroud)

(SET一次只能使用一个值)


The*_*iot 6

SetANSI标准,用于为变量赋值.

将值分配给多个可变数据时,可以使用选择.

有关详细信息,请阅读Narayana Vyas的详细信息