繁体   English   中英

SSIS执行SQL任务是否处理MERGE语句?

[英]Does a SSIS Execute SQL Task handle a MERGE statement?

我正在尝试通过执行SQL任务执行MERGE语句,如本文所述:

http://technet.microsoft.com/zh-CN/library/cc280522.aspx

我的MERGE语句非常简单(请参见下文)。 我可以在SSMS中毫无问题地执行MERGE语句,但是当我将其放入Execute SQL Task中时,它会失败并显示以下错误: “关键字'AS'附近的语法不正确。”。 可能的失败原因:查询问题,“ ResultSet”属性未正确设置,参数未正确设置或连接未正确建立。

该语句不会在Execute SQL Task容器中进行解析,但是显然会(因为它可以正确运行)在SSMS中进行解析。 在执行SQL任务中使用MERGE语句时,是否需要了解任何技巧或语法方面的考虑?

MERGE HospitalDailyWastage AS TGT
USING NightlyHospitalWastage AS SRC
ON (
        TGT.HospitalID = SRC.HospitalID AND
        TGT.WastageDate = SRC.WastageDate AND
        TGT.ProductGroupID = SRC.ProductGroupID AND
        TGT.DataTypeID = SRC.DataTypeID AND
        TGT.ServiceLineID = SRC.ServiceLineID
    )
WHEN NOT MATCHED BY TARGET
    THEN INSERT (   
            HospitalID,
            WastageDate,
            ProductGroupID,
            DataTypeID,
            ServiceLineID,
            OPos,
            ONeg,
            APos,
            ANeg,
            BPos,
            BNeg,
            ABPos,
            ABNeg,
            Auto,
            LastUpdated,
            UpdatedBy
        ) VALUES (
            SRC.HospitalID,
            SRC.WastageDate,
            SRC.ProductGroupID,
            SRC.DataTypeID,
            SRC.ServiceLineID,
            SRC.OPos,
            SRC.ONeg,
            SRC.APos,
            SRC.ANeg,
            SRC.BPos,
            SRC.BNeg,
            SRC.ABPos,
            SRC.ABNeg,
            SRC.Auto,
            getdate(),
            'system'            
        )   
WHEN MATCHED 
    THEN UPDATE SET TGT.OPos = SRC.OPos,
                    TGT.ONeg = SRC.ONeg,
                    TGT.APos = SRC.APos,
                    TGT.ANeg = SRC.ANeg,
                    TGT.BPos = SRC.BPos,
                    TGT.BNeg = SRC.BNeg,
                    TGT.ABPos = SRC.ABPos,
                    TGT.ABNeg = SRC.ABNeg,
                    TGT.Auto = SRC.Auto,
                    TGT.LastUpdated = getdate(),
                    TGT.UpdatedBy = 'system';

我认为T-SQL是正确的。 您是否尝试过将分号作为T-SQL的第一个字符? 我在CTE和输入';'时遇到了类似的问题 在“ WITH”帮助之前。

首先,您确定您与可以在SSMS上运行语句的服务器连接正确吗? 如果您要连接的服务器设置为兼容模式,则肯定会出错。 检查exec SQl任务的所有设置,也许不是查询,而是任务的设置方式。 您可以通过exec sql运行与当前设置相同的表吗?

我从未尝试过在Exec SQl中运行merge(我们处于兼容模式,因此我无法使用新语法),但是您尝试过吗?

使sql进入存储的proc。 确保可以在连接所在的同一服务器上执行proc。

然后在exec SQl任务中执行proc。 那样有用吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM