T-SQL中SELECT和SET有什么区别?

8
我正在编写一个存储过程,执行一些动态SQL语句。下面是我在4GuysFromRolla.com找到的示例。
CREATE PROCEDURE MyProc
  (@TableName varchar(255),
   @FirstName varchar(50),
   @LastName varchar(50))
AS

    -- Create a variable @SQLStatement
    DECLARE @SQLStatement varchar(255)

    -- Enter the dynamic SQL statement into the
    -- variable @SQLStatement
    SELECT @SQLStatement = "SELECT * FROM " +
                   @TableName + "WHERE FirstName = '"
                   + @FirstName + "' AND LastName = '"
                   + @LastName + "'"

    -- Execute the SQL statement
    EXEC(@SQLStatement)

如果你注意到了,他们在使用SELECT关键字而不是SET。我不知道你可以这样做。有人能向我解释一下两者之间的区别吗?我一直认为SELECT只是用于选择记录。


1
重复的问题:Set和Select有什么区别? - shahkalpesh
1
不完全相同。另一个问题在询问性能,我在询问关键字语言差异。 - Micah
5个回答

10

SELECT是ANSI标准,SET @LocalVar为MS T-SQL

SELECT允许多次赋值:例如 SELECT @foo = 1, @bar = 2


你的第一个观点在@breitak67的回答中被许多来源所驳斥(https://dev59.com/WUjSa4cB1Zd3GeqPCyFo#1034756)。 - Michael Haren
该死!我变老了。不过,我想SELECT现在也是ANSI的了。 - gbn
有趣的是 Sybase 没有提到 SET @var。http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug598.htm - gbn

6
基本上,SET是SQL ANSI标准用于设置变量的方式,而SELECT不是。 SET仅适用于单个赋值,而SELECT可以进行多个赋值。与其编写冗长的解释,不如在网上已有很好的总结:

Ryan Farley博客

Tony Rogerson

Stack Overflow


2

编辑 你比我快了44秒


0

考虑到你仍然需要将值写入内存,我对此表示怀疑。无论是2xSET还是1xSELECT,它仍然需要进行两次赋值操作。 - gbn
gbn,我提供了基准测试。你可以运行基准测试并亲自查看。 - A-K

0

如果查询语句只返回一条记录,Select 也可以用于从 select 语句中获取变量赋值。

Select @myvariable = myfield from my table where id = 1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接