2017-01-10 13 views
1

Я загрузки таблицы SQL сервера с помощью АПД и после вставки закончена, я должен сделать небольшое манипулирование с использованием ниже подходаВызов хранимой процедуры с помощью АПД

  1. Trigger (После вставки) - не удалось, SQL сервер не умелым для обнаружения вставленной записи, которую я нажимаю с помощью АПД. **Seems to be a bug**.

  2. хранимой процедуры с помощью определенного пользователем тип таблицы - Получение ошибки

Номер ошибки '156'. Сообщение об ошибке из выполнения базы данных: Неверный синтаксис рядом с ключевым словом 'select'. Должен объявить переменную таблицы "@a".

Я создал ниже трубопровода

{ 
    "name": "CopyPipeline-xxx", 
    "properties": { 
     "activities": [ 
      { 
       "type": "Copy", 
       "typeProperties": { 
        "source": { 
         "type": "AzureDataLakeStoreSource", 
         "recursive": false 
        }, 
        "sink": { 
         "type": "SqlSink", 
         "sqlWriterStoredProcedureName": "sp_xxx", 
         "storedProcedureParameters": { 
          "stringProductData": { 
           "value": "str1" 
          } 
         }, 
         "writeBatchSize": 0, 
         "writeBatchTimeout": "00:00:00" 
        }, 
        "translator": { 
         "type": "TabularTranslator", 
         "columnMappings": "col1:col1,col2:col2" 
        } 
       }, 
       "inputs": [ 
        { 
         "name": "InputDataset-3jg" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "OutputDataset-3jg" 
        } 
       ], 
       "policy": { 
        "timeout": "1.00:00:00", 
        "concurrency": 1, 
        "executionPriorityOrder": "NewestFirst", 
        "style": "StartOfInterval", 
        "retry": 3, 
        "longRetry": 0, 
        "longRetryInterval": "00:00:00" 
       }, 
       "scheduler": { 
        "frequency": "Hour", 
        "interval": 8 
       }, 
       "name": "Activity-0-xxx_csv->[dbo]_[xxx_staging]" 
      } 
     ], 
     "start": "2017-01-09T21:48:53.348Z", 
     "end": "2099-12-30T18:30:00Z", 
     "isPaused": false, 
     "hubName": "hub", 
     "pipelineMode": "Scheduled" 
    } 
} 

и используя ниже хранимую процедуру

create procedure [dbo].[sp_xxx] @xxx1 [dbo].[ut_xxx] READONLY, @str1 varchar(100) AS 

MERGE xxx_dummy AS a 
USING @xxx1 AS b 
ON (a.col1 = b.col1) 
WHEN NOT MATCHED 
    THEN INSERT(col1, col2) 
    VALUES(b.col1, b.col2) 
WHEN MATCHED 
    THEN UPDATE SET a.col2 = b.col2; 

Пожалуйста, помогите мне решить эту проблему.

+0

Где сценарий с @a - частью скрипта, где есть ошибка. И объявляется перед использованием? – Deadsheep39

ответ

4

Я могу воспроизвести вашу первую ошибку. Добавление в таблицу SQL Server с Azure Factory Data (АПД), как представляется, использовать насыпной метод вставки (по аналогии с BULK INSERT, BCP, SSIS и т.д.) и по умолчанию эти методы не срабатывают триггеры:

insert bulk [dbo].[testADF] ([col1] Int, [col2] Int, [col3] Int, [col4] Int) 
with (TABLOCK, CHECK_CONSTRAINTS) 

С BCP , BULK INSERT есть флаг для изменения, чтобы сказать «триггеры огня», но, похоже, нет способа изменить этот параметр для АПД. В качестве обходного пути переместите логику с вашего триггера в хранимую процедуру.

Если вы считаете, что этот флаг важен, подумайте о создании feedback item.