使用var Table但不是Temp Table的标量变量错误

时间:2017-06-27 15:21:57

标签: sql variables temp-tables

我很难过这个。我有以下代码,它在更新语句中的最后一个@POC_XLATE的工作正常,然后我得到错误必须DECLARE SCALAR VARIABLE。  如果我将表更改为临时表,代码工作正常。我已经尝试将select语句移动到代码的末尾,但是没有用。希望有人对它为什么会这样做有一些建议。提前谢谢。

declare  @POC_XLATE as TABLE(
    POC_XLATE_ID int  NULL,
    TAR_ID int NULL,
    POC_USERID varchar(50) NULL,
    ACTION_DATE datetime NULL
) 
insert into @POC_XLATE(POC_XLATE_ID, TAR_ID, POC_USERID, ACTION_DATE)
select * from POC_XLATE
where POC_XLATE.ACTION_DATE is null

select * from @POC_XLATE

update @POC_XLATE
set ACTION_DATE = TAR_DATA.OPEN_DATE
from TAR_DATA
where @POC_XLATE.TAR_ID = TAR_DATA.TAR_ID 

1 个答案:

答案 0 :(得分:1)

列别名不能以@开头。这是声明的标量变量的符号。所以,使用表别名:

update p
    set ACTION_DATE = td.OPEN_DATE
    from  @POC_XLATE p JOIN
          TAR_DATA td 
          on p.TAR_ID = td.TAR_ID ;

但是为什么要分两步编写查询?

insert into @POC_XLATE(POC_XLATE_ID, TAR_ID, POC_USERID, ACTION_DATE)
    select p.POC_XLATE_ID, p.TAR_ID, p.POC_USERID, td.OPEN_DATE
    from POC_XLATE p left join
         TAR_DATA td 
         on p.TAR_ID = td.TAR_ID
    where p.ACTION_DATE is null;

一步比两个人更清洁。