SET与SELECT - 有什么区别?

时间:2009-05-15 02:37:48

标签: performance tsql functional-programming

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


更新
感谢所有回复的人。正如一些人所指出的那样,this Narayana Vyas Kondreddi的文章有很多好消息。阅读完文章之后我也仔细阅读了文章,并在this找到了Ryan Farley精简版,其中提供了重点,并认为我会分享它们:

  1. SET是ANSI的标准 变量赋值,SELECT不是。
  2. SET只能分配一个变量 一时间,SELECT可以制作多个 一次分配。
  3. 如果从查询中分配,SET可以 仅指定标量值。如果 查询返回多个值/行 然后SET将引发错误。选择 将指定其中一个值 变量并隐藏事实 返回了多个值(所以 你可能永远都不知道为什么 其他地方出了问题 - 对故障排除很有趣)
  4. 从查询中分配时是否存在 没有返回值,然后SET将 分配NULL,其中SELECT不会 完成任务(所以 变量不会改变 这是以前的价值)
  5. 就速度差异而言 - 那里 两者之间没有直接的区别 设置和选择。然而SELECT的 能够进行多项任务 在一次拍摄确实给它一点点 速度优于SET。

5 个答案:

答案 0 :(得分:27)

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

有关更多详细信息和示例,请参阅:Difference between SET and SELECT when assigning values to variables

答案 1 :(得分:7)

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

SELECT @error = @@ERROR, @rowcount = @@ROWCOUNT

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

答案 2 :(得分:6)

设置 ANSI标准,用于为变量赋值。

将值分配给多个vairables 时,可以使用

选择

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

详细信息

答案 3 :(得分:3)

设置并选择两个赋值给变量。使用select,您可以将值分配给多个变量

有点像

选择@ var1 = 1,@ var2 = 2

在使用set时你必须使用单独的set语句(它是一种ANSI分配值的方式),即

设置@ var1 = 1

设置@ var2 = 2

我希望这会有所帮助

欢呼声

答案 4 :(得分:0)