
[英]Report rowcount to SQL AGENT from Execute SQL task in SSIS package
[英]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.