理解SQL语法

时间:2016-05-31 11:03:57

标签: sql sql-server tsql

我是一名C#开发人员,试图更熟悉SQL Server存储过程。

我有点困惑为什么“A”中的语法有效,而“B”不适用于Set @id。这里发生什么使得“B”需要Select而不是Set

示例A(有效)

DECLARE @currDateTime DateTime

SET @currDateTime = GetDate()

SELECT @currDateTime

示例B(不起作用)

 DECLARE @id int

 SET @id = ID FROM [MyTable] WHERE [Field1] = 'Test'

示例C(有效)

 DECLARE @id int

 SELECT @id = ID 
 FROM [MyTable] 
 WHERE [Field1] = 'Test'

2 个答案:

答案 0 :(得分:5)

SELECT是一种内置类型的SQL子句,它运行查询并以表格的格式返回结果集,它将变量分配给查询的结果

SET是一个设置变量的子句。

这两者非常不同。 SELECT有各种其他相关条款,例如FROMWHERE等等; SET没有。 SELECT在正常使用情况下将值作为结果表返回; SET没有。

不可否认,两者在表达式中看起来都是一样的:

set @currDateTime = GetDate();
select @currDateTime = GetDate();

但是,设置单个值的语法看起来是相同的,这实在是巧合。

答案 1 :(得分:2)

它不起作用,因为它的SQL语法不正确,从表/视图/表函数中获取数据时需要SELECT

使用表达式时可以使用SET,即:

DECLARE @Id bigint


SET @Id = (SELECT TOP 1 Id
                FROM MyTable
                WHERE Field1 = 'Test')