Я пытаюсь выполнить инструкцию MERGE через задачу «Выполнение SQL», как описано в этой статье:
http://technet.microsoft.com/en-us/library/cc280522.aspx
Мое утверждение MERGE довольно простое (см. Ниже). Я могу без труда выполнить инструкцию MERGE в SSMS, но когда я помещаю ее в задачу «Выполнение SQL», она завершается ошибкой: «Неверный синтаксис рядом с ключевым словом« AS ».» Возможные причины сбоя: проблемы с запросом, свойство ResultSet установлено неправильно, параметры установлены неправильно или соединение установлено неправильно.
Оператор не будет анализироваться в контейнере «Выполнение SQL-задачи», но, очевидно, выполняется (поскольку он работает правильно) в SSMS. Есть ли какие-либо хитрости или синтаксические соображения, о которых мне нужно знать при использовании оператора MERGE в задаче «Выполнение SQL»?
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';