Задача SSIS «Выполнение SQL» обрабатывает оператор MERGE? - PullRequest
1 голос
/ 14 января 2010

Я пытаюсь выполнить инструкцию 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';

Ответы [ 2 ]

1 голос
/ 15 января 2010

Я предполагаю, что T-SQL правильный. Вы пытались поставить точку с запятой в качестве первого символа вашего T-SQL? У меня была похожая проблема с CTE и положением ';' прежде чем помогло «WITH».

0 голосов
/ 14 января 2010

Во-первых, вы уверены, что у вас есть правильное соединение с тем же сервером, на котором вы смогли запустить инструкцию в SSMS? Конечно, будет ошибка, если сервер, к которому вы подключаетесь, настроен в режиме совместимости. Проверьте все настройки задачи exec SQl, возможно, это не запрос, а способ задания задачи. Можете ли вы запустить select, используя те же таблицы из exec sql, что и в данный момент?

Я никогда не пытался выполнить слияние в Exec SQl (мы находимся в режиме совместимости, поэтому я не играю с новым синтаксисом), но вы пробовали это?

Превратить sql в сохраненный процесс. Убедитесь, что вы можете выполнить процедуру на том же сервере, для которого установлено соединение.

затем выполните proc в задаче exec SQl. Это работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...