一尘不染

SQL Server错误:列名或提供的值数与表定义不匹配

sql

关闭。 这个问题不能重现,或者是由错别字引起的。它当前不接受答案。


想改善这个问题吗? 更新问题,使它成为Stack Overflow的主题

6年前关闭。

改善这个问题

为什么查询此内容:

INSERT INTO [IN4MATICSystem_Pie].[dbo].[ArchivioErogazioni] 
   SELECT 
       IDTER, CODTER, IDTEV, CODTEV,  IDVEI, CODVEI, IDTEA, CODTEA, IDAUT, CODAUT,  
       IDGRV, CODGRV, IDGRA, CODGRA, IDERO, CODERO, IDPRO, CODPRO, DATA_EROG, 
       ORA_EROG, KMATTUALI, VOLUME_LT, IMPORTO, PRUNIT, INFO, MODIFICATO,  
       ANOMALA, ACCETTATA, ESPORTATO, IMPORTATO, IMPORTRIF, USER_INS, DATA_INS, 
       USER_MOD, DATA_MOD, TRAN_ID, TEMPERATURA, KG, VOLUME_COMPENSATO, ORE 
   FROM 
       [IS-SERVER_SQL\SVILUPPO].IN4MATICSystem_ARC.dbo.ArchivioErogazioni 
   WHERE 
       DATA_EROG >= CONVERT(datetime,'30/11/2014 00:00:00',103) 
       AND DATA_EROG <= CONVERT(datetime,'01/01/2015 23:59:59',103)

抛出此错误:

列名或提供的值数与表定义不匹配。

该查询不抛出任何内容:

 SELECT IDTER, CODTER, IDTEV, CODTEV,  IDVEI, CODVEI, IDTEA, CODTEA, IDAUT, CODAUT,  IDGRV, CODGRV, IDGRA, CODGRA, IDERO, CODERO,
 IDPRO, CODPRO, DATA_EROG, ORA_EROG, KMATTUALI, VOLUME_LT, IMPORTO, PRUNIT, INFO, MODIFICATO,  ANOMALA, ACCETTATA, ESPORTATO, IMPORTATO, 
 IMPORTRIF, USER_INS, DATA_INS, USER_MOD,  DATA_MOD, TRAN_ID, TEMPERATURA, KG, VOLUME_COMPENSATO,  ORE 
FROM [IS-SERVER_SQL\SVILUPPO].IN4MATICSystem_ARC.dbo.ArchivioErogazioni WHERE DATA_EROG >= CONVERT(datetime,'30/11/2014 00:00:00',103) AND DATA_EROG <= CONVERT(datetime,'01/01/2015 23:59:59',103)

为什么?


阅读 235

收藏
2021-03-17

共1个答案

一尘不染

显然可以说是例外-列数或所选值的顺序与ArchivioErogazioni中定义的列不匹配。

最好总是使用要插入的显式列列表进行插入。这也可以防止出现许多“逻辑”错误。

例如,假设表

dbo.SomeTable(Name_First nvarchar(20), Name_Last nvarchar(20))

让我们假设你忘掉在列的顺序SomeTableName_First不是Name_Last和你一样插入

insert into dbo.SomeTable
select Name_Last, Name_First
from Some_Other_Table_Or_Subquery

在这种情况下,您不会有任何错误-但显然您会插入错误的值(交换名称)。

考虑这种方法:

insert into dbo.SomeTable (Name_Last, Name_First)
select Name_Last, Name_First
from Some_Other_Table_Or_Subquery

在这种情况下,您无需记住要插入的表中的列顺序-当您明确指定要插入的列和顺序时-这样,在这种情况下就不太可能发生先前的逻辑错误。

这是一个“愚蠢”的例子,但我希望这是有道理的。

2021-03-17