如何修复所有允许为空的SQL列中的错误213

时间:2019-07-18 16:05:54

标签: sql ssis etl

我在作业自动化中使用的SQL查询有问题

该过程将数据从源表(48列)插入到目标表(49列,其中第49 /最后一列不在源表中)。但是目标表和源表中的所有列均接受null ,因此将48列复制到49列应该不是问题。

它抛出此错误:

  

列名或提供的值数与表定义不匹配。 [SQLSTATE 21S01](错误213)。步骤失败。

它应该只在第49列中插入null,并且我已经检查了列名并且它们对应。

让我们将其视为无法删除第49列。

请在这里可以做什么?

2 个答案:

答案 0 :(得分:0)

接受NULL并不意味着您可以在sql INSERT语句中指定49个cols和48个值。列数和值数必须完全匹配。从INSERT列表中删除多余的列,或者将49th值(我猜为NULL)添加到值列表中。在这两种情况下,如果column可以为NULL,则它将设置为NULL

答案 1 :(得分:0)

首先,如果您的代码无法正常工作,则应将其发布,以便我们可以确定发生了什么。但我很乐意打赌您正在尝试简化流程并使用类似这样的方法:

INSERT tableB
SELECT *
FROM tableA

但是表没有相同数量的列,因此SQL Engine不知道哪个源列进入哪个目标列。您需要提供一个明确的列表,以便知道要忽略的列表:

INSERT tableB 
(
  col1,
  col2,
  ...
  col48
)
SELECT
  col1,
  col2,
  ...
  col48
FROM tableA;