为什么我不能将table变量与其他声明一起声明?

时间:2013-07-12 18:15:15

标签: sql-server-2008 tsql syntax sql-server-2012 declare

例如:

DECLARE
    @t TABLE(id int),
    @i int;

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ','.

但是使用单独的DECLARE语句可以正常工作

DECLARE @t TABLE(id int);

DECLARE
    @i int,
    @str varchar(10);

Command(s) completed successfully.

为什么会这样?表声明和“通常”变量声明有什么区别?

1 个答案:

答案 0 :(得分:1)

我不知道"为什么",确切地说,但我有几个猜测:

  1. 表变量不像普通变量那么简单。它不仅仅是内存中的一个地方:在幕后,正在tempdb中创建一个临时表。因此,该语言的设计者可能想要区分它和更简单的变量。

  2. 表变量的语法比普通变量声明更复杂。具有多个表变量加上多个普通变量以及变量初始化的声明语句可能会变得非常复杂。对于解析器来说,语法可能过于混乱(或者过于模糊:对多种解释开放)。