有时候我们在执行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