我在我的SQL -服务器中有以下sql查询:
WITH SampleCTE1 AS ( ... ),
MyCTE(SomeField) AS ( SELECT SomeField FROM ....)
UPDATE SomeTable WITH (serializable)
set SomeColumnInSomeTable = MyCTE.SomeField
where SomeFieldInSomeTable = 112
if @@rowcount = 0
begin
insert into SomeTable.....
end多部分标识符"MyCTE.SomeField“无法绑定。
你能帮我消除这个错误吗?
顺便说一句,我有一个sql-server-2012。使用MERGE可以吗?在一些地方,我确实读到,我不应该使用它,因为它的错误。你觉得呢?
发布于 2017-03-31 17:38:56
您只能在最后一个cte之后的语句中引用您的公共表表达式,因此您必须重复它以再次用于下面的insert (或使用merge)。
您还没有在您的MyCte语句中加入或访问update。
WITH SampleCTE1 AS ( ... ),
MyCTE(SomeField) AS ( SELECT SomeField FROM ....)
UPDATE SomeTable WITH (serializable)
set SomeColumnInSomeTable = MyCTE.SomeField
from SomeTable
inner join MyCTE
on SomeTable.SomeId = MyCte.SomeId
where SomeFieldInSomeTable = 112;
if @@rowcount = 0
begin;
;WITH SampleCTE1 AS ( ... ),
MyCTE(SomeField) AS ( SELECT SomeField FROM ....)
insert into SomeTable.....
end;发布于 2017-03-31 17:39:41
MyCTE在UPDATE中没有引用。它应该是
...
UPDATE SomeTable WITH (serializable)
set SomeColumnInSomeTable = MyCTE.SomeField
FROM SomeTable
{LEFT/ RIGHT / INNER}JOIN MyCTE ON ...https://stackoverflow.com/questions/43146552
复制相似问题