我在作业自动化中使用的SQL查询有问题
该过程将数据从源表(48列)插入到目标表(49列,其中第49 /最后一列不在源表中)。但是目标表和源表中的所有列均接受null ,因此将48列复制到49列应该不是问题。
它抛出此错误:
列名或提供的值数与表定义不匹配。 [SQLSTATE 21S01](错误213)。步骤失败。
它应该只在第49列中插入null,并且我已经检查了列名并且它们对应。
让我们将其视为无法删除第49列。
请在这里可以做什么?
答案 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;