首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置和选择-有什么区别?

设置和选择-有什么区别?
EN

Stack Overflow用户
提问于 2009-05-15 02:37:48
回答 5查看 22.8K关注 0票数 43

是否有人能确定SETSELECT在the中的功能/性能差异(如果有的话)?在什么情况下,我应该选择一个而不是另一个?

更新:

感谢所有回应的人。正如一些人指出的那样,Narayana Vyas Kondreddi撰写的文章有很多好的信息。在阅读了这篇文章之后,我还仔细阅读了这篇文章,发现了由瑞安·法利编写的瑞安·法利浓缩版,它提供了一些亮点,并认为我可以分享它们:

  1. SET是ANSI变量赋值的标准,选择不是。
  2. SET一次只能赋值一个变量,选择可以同时进行多个赋值。
  3. 如果从查询中赋值,SET只能分配标量值。如果查询返回多个值/行,则SET将引发错误。SELECT会将其中一个值赋值给变量,并隐藏多个值被返回的事实(因此您可能永远不知道为什么在其他地方出了问题-对这个值进行故障排除很有趣)
  4. 当从查询中赋值时,如果没有返回的值,则SET将赋值为NULL,其中SELECT将根本不进行赋值(因此变量将不会与以前的值更改)
  5. 就速度差异而言,SET和SELECT之间没有直接差异。然而,SELECT在一次投篮中完成多个任务的能力确实给了它一个比设定稍微快的优势。
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-15 02:42:18

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

有关更多细节和示例,请参阅:为变量赋值时SET和SELECT之间的差异

票数 31
EN

Stack Overflow用户

发布于 2009-05-15 02:45:45

Server:您必须使用SELECT的一种情况是在分配@@ERROR和@@ROWCOUNT时必须在相同的语句中设置它们(否则它们会被重置):

代码语言:javascript
复制
SELECT @error = @@ERROR, @rowcount = @@ROWCOUNT

(SET一次只处理一个值)

票数 9
EN

Stack Overflow用户

发布于 2009-05-15 02:44:49

Set是ANSI标准,用于为变量赋值。

在为多个vairables赋值时,可以使用Select。

欲知更多详情,请阅读纳拉亚纳·维亚斯的详细文章

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/866767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档