我很难过这个。我有以下代码,它在更新语句中的最后一个@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
答案 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;
一步比两个人更清洁。