Sql 使用合并时对象名称“源”无效
我在merge语句中使用了它,但是现在我得到了一个错误:无效的对象名“Source” 我没有在我的任何其他合并语句中得到这个错误。资料来源如下。我已经在一定程度上匿名了,所以如果不清楚,请告诉我Sql 使用合并时对象名称“源”无效,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在merge语句中使用了它,但是现在我得到了一个错误:无效的对象名“Source” 我没有在我的任何其他合并语句中得到这个错误。资料来源如下。我已经在一定程度上匿名了,所以如果不清楚,请告诉我 MERGE dbo.Destination WITH (HOLDLOCK) AS Target USING ( SELECT DISTINCT id, col3, CAST(LEFT(DATEADD(m,months,CONVERT(date,CONCAT(origination,'/01')
MERGE dbo.Destination WITH (HOLDLOCK) AS Target
USING
(
SELECT DISTINCT id, col3,
CAST(LEFT(DATEADD(m,months,CONVERT(date,CONCAT(origination,'/01'))),7) as varchar(20)) as CalendarMonth,
col1, col2,col4 FROM dbo.Staging
) AS Source
ON (Target.ID=Source.id
AND Target.Month=Source.col3)
WHEN MATCHED THEN
UPDATE SET
Target.CalendarMonth=Source.CalendarMonth,
Target.colF= (SELECT CASE WHEN col1>0 THEN 1 END AS colF FROM Source),
Target.colD=(SELECT CASE WHEN col4>0 THEN 1 END AS colD
FROM Source),
Target.colC=(SELECT CASE WHEN col1=0 AND col2=0
THEN 1 END AS colC FROM Source),
Target.colB(SELECT CASE WHEN col1>0 AND col2
THEN 1 END AS colB FROM Source),
Target.colG=(SELECT CASE WHEN col1>0 THEN col1 END AS colG FROM Source),
Target.colE=(SELECT CASE WHEN col4>0 THEN col3 END
AS colE FROM Source),
Target.PaidMonth=(SELECT CASE WHEN col1=0 AND col2=0
THEN col3 END AS PaidMonth
FROM Source),
WHEN NOT MATCHED BY TARGET THEN
INSERT
(Destination Table columns
)
VALUES
( Source values including derived values from above);
END
提前感谢您的帮助
更新:
@Sam cd的建议有助于我将派生列中的select语句替换为CASE WHEN col4>0,然后是col3 END,依此类推。谢谢大家的帮助 您的问题在于:
VALUES
( Source values including derived values from above)
这是一个评论吗?你的问题可能在于如何表达更新。使用子查询将取消别名。也就是说,SQL将在数据库中查找一个实际命名为source的表,该表可能不存在
Target.colF= (SELECT CASE WHEN col1>0 THEN 1 END AS colF FROM Source),
您不需要这样表述,因为源代码已经被别名化了,您可以说
Target.colF= CASE WHEN Source.col1>0 THEN 1 END,
这是您复制/粘贴的示例吗?这不是一个完整的语句。不,我更改了实际代码中的变量名。当目标插入部分不匹配时,我可能有点懒惰,对此我深表歉意。我的意思是,源值被插入到目标表列中,包括从上面映射到相应目标列的派生列calc。这很有意义。当你们这样做的时候,很难看出语句的那个部分是否有语法错误。我可能有点懒散,因为并没有和目标插入部分匹配,对此我深表歉意。我的意思是将源值插入到目标表列中,包括上面映射到相应目标列的派生列calc。我曾尝试在case语句中用actaul表名替换Source,但没有成功。我试试这个。谢谢