首页 > 解决方案 > SSIS OLE DB命令中的多个插入语句

问题描述

当我尝试在这样的 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 Client 11.0” Hresult:0x80004005 描述:“子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询是用作表达式。”。

子选择语句每个只返回一条记录。变量已被声明和设置。任何建议如何解决这个问题或错误到底在哪里?

标签: sqlsql-serverssisoledb

解决方案


我建议运行这个查询:

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;

推荐阅读