使用var表的标量变量误差,而不是温度表



我对此感到困惑。我有以下代码,直到更新语句中的最后一个@poc_xlate的点可以正常工作,然后我得到错误必须声明标量变量。 如果我将表更改为临时表,则代码正常。我尝试将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 

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

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;

一个步骤比两个步骤要干净得多。

相关内容

  • 没有找到相关文章

最新更新