SQL Server - “列名或提供的值与表定义不匹配”

时间:2017-10-10 13:31:33

标签: sql sql-server

我知道过去有很多问题可以解决这个问题,我理解为什么会收到这个错误。

我真的是在快捷方式之后,我的表有数百列,我不想手动筛选代码,根据字段定义检查值。我尝试运行它时的错误消息始终指向相同的行号 - 其上带有INSERT的行。

是否有一种简单的方法可以让它指向实际字段,但是它存在问题?

编辑:在阅读了给出的答案后,我意识到我根本不理解这个消息的原因。它只是缺少字段的结果,与根本不正确的数据类型无关。当我添加缺少的字段时,即使数据类型在某些字段中仍然存在错误,错误也会消失。

幸运的是,答案和评论理解了问题的实际原因,而不是我对它的评估,因此问题得以解决。

3 个答案:

答案 0 :(得分:2)

  

是否有一种简单的方法可以让它指向它所拥有的实际字段   问题?

当然不是。这需要直观地了解程序员的实际意图,其中计算机目前无法使用。

您有一个插入内容:

INSERT INTO MyTable (ColumnA, ColumnB, ... ColumnZ)
VALUES (ValueA, ValueC, ... ValueZ)

计算机无法知道ColumnB应该获得ValueB而不是ValueC,因为程序员可能就是这么想的。因此,无法以编程方式知道ValueB是缺少的值,或者ColumnB是"问题列"。

所以不,没有捷径,抱歉。

答案 1 :(得分:2)

您可以做的一件事是将insert构造为:

insert into t(col1,
              col2,
              . . .
             )
    values (<whatever>,  -- col1
            <whatever>,  -- col2
            . . .
           );

这命令表达式。您可以通过将两个列表粘贴到电子表格中并手动比较它们来发现问题。

或者,我更有可能这样做:

insert into t(col1,
              col2,
              . . .
             )
    select <whatever> as col1,
           <whatever> as col2
            . . .

当然,仅列出要插入的列可能会解决您的问题。

然后,我建议你重温一下你的桌子。在表中有数百个列进行这样的插入可能是一个坏主意。可能有更好的方法来构建表格。

对于好奇的人来说,MySQL有一个有趣的,非标准的解决方案。它允许set中的insert,因此您可以明确设置列值。

答案 2 :(得分:1)

这不是SQL解决方案。但我可能会制作一个小程序,只是为了将字段映射到值,然后从那里确定错误。

检查JavaScriptmap-field-to-values的简单程序。