日期:2014-05-18  浏览次数:20704 次

SQL Server奇怪问题,不能插入数据
我原来有这么个表

CREATE   TABLE   [BarCode_Mapping]   (
[ATL_ID]   [varchar]   (20)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,
[My_ID]   [varchar]   (20)   COLLATE   Chinese_PRC_CI_AS   NULL   ,
[PostDate]   [datetime]   NULL   CONSTRAINT   [DF_BarCode_Mapping_PostDate]   DEFAULT   (getdate()),
CONSTRAINT   [PK_BarCode_Mapping]   PRIMARY   KEY     CLUSTERED  
(
[ATL_ID]
)     ON   [PRIMARY]  
)   ON   [PRIMARY]
GO

后来增加了两个字段(原来有数据210万条)

alter   table   Barcode_Mapping
add   ProductDate   smalldatetime,BatchID   varchar(20)

可增加这两个字段之后就不能插入数据了
insert   into   Barcode_Mapping
(Atl_ID,My_ID,PostDate,BatchID,ProductDate)
values( '123 ', '123 ',getdate(), '123 ', '2007-1-1 ')

提示 "列名或所提供值的数目与表定义不匹配 "
明明是一样的,怎么就不能保存呢

如果在另外一个数据库新建这样的一个表,再加上后来新增的两个字段
执行上面的insert语句就可以正常保存


不知道咋回事,望高手解疑答惑,不胜感激


------解决方案--------------------
插入的smalldatetime数据类型不对...
------解决方案--------------------
测试通过,没有问题啊

楼主是在查询分析器里执行的插入语句吗?
------解决方案--------------------
--try

insert into Barcode_Mapping
(Atl_ID,My_ID,PostDate,BatchID,ProductDate)
values( '123 ', '123 ',default, '123 ', '2007-1-1 ')
------解决方案--------------------
可以插入啊
------解决方案--------------------
可能以前的SQL語句是這樣寫的
insert into Barcode_Mapping
values( '123 ', '123 ', getdate())
------解决方案--------------------
主键约束了?
------解决方案--------------------
报错信息是什么?
------解决方案--------------------
insert into Barcode_Mapping
values( '123 ', '123 ', getdate())

如果你的语句这样写,然后再增加列的时候,肯定会出 "列名或所提供值的数目与表定义不匹配 "
这样的错误的

insert into Barcode_Mapping
(Atl_ID,My_ID,PostDate,BatchID,ProductDate)
values( '123 ', '123 ',default, '123 ', '2007-1-1 ')

这样写是没有问题的
就是说在表名后面要跟上列名列表
------解决方案--------------------
最好事将错误提示弹出来 , 可能事原来插入的时候 只写表名 没有具体写清插入那些列 ,你现在给表增加了2列导入表列和插入的值数量不一致