SSIS Несколько операторов вставки в команде OLE DB - PullRequest
0 голосов
/ 02 ноября 2018

Когда я пытаюсь поместить более одного оператора вставки в команду OLE DB, например:

    INSERT INTO [TABLE_A] ([NAME_A]) VALUES (@a)
    INSERT INTO [RELATION_TABLE]([ID_A],[ID_B])
    VALUES (
        (SELECT [ID_A] FROM [TABLE_A] WHERE [NAME_A] = @a),
        (SELECT [ID_B] FROM [TABLE_B] WHERE [NAME_B] = @b)
    )

Я получаю эту ошибку:

Доступна запись OLE DB. Источник: «Microsoft SQL Server Native Клиент 11.0 "Hresult: 0x80004005 Описание:" Подзапрос возвращен более 1 значение. Это не разрешено, когда подзапрос следует =, ! =, <, <=,>,> = или когда подзапрос используется в качестве выражения. ".

Операторы sub-select возвращают только одну запись каждый. Переменные были объявлены и установлены. Любые предложения, как решить эту проблему или где именно ошибка?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Я бы предложил выполнить этот запрос:

SELECT a.ID_A, b.ID_B
FROM TABLE_A a JOIN
     TABLE_B b
     ON a.NAME_A = @a AND b.NAME_B = @b;

Это может вернуть дубликаты, указывающие, что вы ошибаетесь в данных. Есть дубликаты. Возможно, вам следует исправить данные и создать уникальный индекс или ограничение для name в каждой таблице, чтобы обеспечить целостность данных.

Если это возвращает то, что вы хотите, то вставьте фразу как:

INSERT INTO [RELATION_TABLE]([ID_A],[ID_B])
    SELECT a.ID_A, b.ID_B
    FROM TABLE_A a JOIN
         TABLE_B b
         ON a.NAME_A = @a AND b.NAME_B = @b;
0 голосов
/ 02 ноября 2018

Убедитесь, что операторы выбора возвращают только одно значение.

SELECT [ID_A] FROM [TABLE_A] WHERE [NAME_A] = @a
SELECT [ID_B] FROM [TABLE_B] WHERE [NAME_B] = @b
...