我对此感到困惑。我有以下代码,直到更新语句中的最后一个@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;
一个步骤比两个步骤要干净得多。