欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

热门阅读

列名或所提供值的数目与表定义不匹配解决方式

创建时间:2011年10月17日 12:41  阅读次数:(22783)
分享到:
有时候我们在执行SQL的时候,会报出以下错误:
插入错误:列名或所提供值的数目与表定义不匹配

出现这种错误的最根本的原因就是insert中的列数与values中的值数不相同。

我们先创建一个表,用来测试可能出现上述错误的情况:
create table tb
(
col1 varchar(50),
col2 varchar(50),
col3 varchar(50)
)


然后我们分别使用以下语句插入数据
1 insert into tb(col1,col2) values (values1,values2,values3)

很明显,指明要插入数据的只有col1,col2只有两列,而values中却有三个值。
这时候,也可能会报出"INSERT 语句中列的数目小于 VALUES 子句中指定的值的数目。VALUES 子句中值的数目必须与 INSERT 语句中指定的列的数目匹配。"的错误

2 insert inot tb  values (values1,values2,values3,values4)

该SQL中没有指明要插入数据的列,SQL Server会默认往表的所有列中插入数据,很明显,tb中只有三列,而values中有四个有值,所以也会报出以上错误。

3 insert into tb select values1,values2,values3,values4 from tb2

原理同2

最无可奈何的语句:
insert into tb select * from tb2

这种语句是最不推荐的了,首先不明确tb中要插入的列,然后tb2中的数据列也不明确,全部要SQL SERVER自动匹配,表结构稍有变化就会报错了。所以,使用这种语句的朋友推荐一定要写明确要插入列的列名与数据列的列名,即:
insert into tb (col1,col2,col3) select col_1,col_2,col_3 from tb2 

这样,即使后面tb2的结构有变化,也不会导致上面语句有错误。孂[D崘n剉靣`S繈顣CgP?0
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 57+80=? 的结果(结果是:137)
结  果: