以下无法编译:
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
块的表变量?
答案 0 :(得分:9)
声明表变量时,表变量必须是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