SSIS OLE DB命令中的多个插入语句

时间:2018-11-02 09:36:17

标签: sql sql-server ssis oledb

当我尝试在这样的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本机   客户端11.0“结果:0x80004005说明:”返回了子查询   大于1的值。当子查询跟随=时,这是不允许的   !=,<,<=,>,> =或将子查询用作表达式时。”。

每个子选择语句仅返回一条记录。变量已声明并设置。 有什么建议可以解决这个问题或错误的确切位置是什么?

2 个答案:

答案 0 :(得分:1)

我建议运行此查询:

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;

答案 1 :(得分:0)

确保select语句仅返回一个值。

self.navigationItem.titleView.accessibilityIdentifier = YOUR_ACCESSIBILITY_IDENTIFIER;