关闭。 这个问题不能重现,或者是由错别字引起的。它当前不接受答案。
想改善这个问题吗? 更新问题,使它成为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)
为什么?
显然可以说是例外-列数或所选值的顺序与ArchivioErogazioni中定义的列不匹配。
最好总是使用要插入的显式列列表进行插入。这也可以防止出现许多“逻辑”错误。
例如,假设表
dbo.SomeTable(Name_First nvarchar(20), Name_Last nvarchar(20))
让我们假设你忘掉在列的顺序SomeTable是Name_First不是Name_Last和你一样插入
SomeTable
Name_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
在这种情况下,您无需记住要插入的表中的列顺序-当您明确指定要插入的列和顺序时-这样,在这种情况下就不太可能发生先前的逻辑错误。
这是一个“愚蠢”的例子,但我希望这是有道理的。