Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用合并时对象名称“源”无效_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 使用合并时对象名称“源”无效

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语句中使用了它,但是现在我得到了一个错误:无效的对象名“Source”

我没有在我的任何其他合并语句中得到这个错误。资料来源如下。我已经在一定程度上匿名了,所以如果不清楚,请告诉我

 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,但没有成功。我试试这个。谢谢