从select中设置变量值 - 如果不在括号中则为语法错误

时间:2017-03-12 14:18:30

标签: sql-server tsql

我想知道为什么这不起作用:(语法错误)

declare @pis int = select 7

但这有效:

declare @pis int = (select 7)

或者这个:

declare @pis int = 7

select 7有什么问题?

1 个答案:

答案 0 :(得分:2)

此版本:

declare @pis int = (select 7);

正在使用子查询来设置@pis的值。特别是,这是一个标量子查询。标量子查询有两个重要属性:

  • 它只返回1列。
  • 最多返回一行。

可以在查询中允许常量值的情况下使用标量子查询。标量子查询总是必须有自己的一组括号。

我认为最后一块是你的困惑。这个版本:

declare @pis int = select 7;

只是解析器不知道如何处理的关键字和字符串的集合。根据SQL语法,select符号后不允许=