T-SQL表和一个DECLARE块中的其他变量

时间:2015-12-25 22:34:59

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

以下无法编译:

  DECLARE
    @DateFrom Date = '20151225',
    @DateTo Date = '20151226',
    @Ids TABLE (Id Int NOT NULL);

错误:

  

关键字“TABLE”附近的语法不正确。

但是当我为表变量声明添加自己的DECLARE时,它完美地编译:

 DECLARE
    @DateFrom Date = '20151225',
    @DateTo Date = '20151226';

 DECLARE
    @Ids TABLE (Id Int NOT NULL);

Here是SQL小提琴。

第一个片段有什么问题?我们不允许声明与其他变量声明共享相同DECLARE块的表变量?

2 个答案:

答案 0 :(得分:9)

来自DECLARE documentation

  

声明表变量时,表变量必须是DECLARE语句中声明的唯一变量。

您也可以在语法中清楚地看到它:

DECLARE 
{ 
    { @local_variable [AS] data_type  | [ = value ] }
  | { @cursor_variable_name CURSOR }
} [,...n] 
| { @table_variable_name [AS] <table_type_definition> } 

可以声明一个或多个@local_variable[,...n]部分),或只声明一个@table_variable_name

答案 1 :(得分:3)

如果您想要第一个代码段工作,请创建table types

CREATE TYPE dbo.ids as TABLE(Id Int NOT NULL)

DECLARE
    @DateFrom Date = '20151225',
    @DateTo Date = '20151226',
    @Ids dbo.ids;

注意:如果您使用Table type作为输入参数FUNCTION/STORED PROCEDURE,则需要将其声明为READONLY