SQL插入语句提示报错,小弟不懂,请教高人,谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:02:32
我在当前库的情况下,执行如下SQL语句
insert into voucheritems_base

SELECT * FROM ufdata_888_2006.dbo.voucheritems_base WHERE VT_ID='8052'

提示: 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'voucheritems_base' 中为标识列指定显式值。

请各位高人说明一下,我哪儿写错了吗

你把*号,改成所有的字段,然后把自动编号给去掉,也就是id

我刚巧作过了这样的测试!

我的两张表分别叫test1,test2

一模一样的!

id 主键
name char(20)
age int
register_time datetime

如果这样写的话

insert into test2 select * from test1

消息 8101,级别 16,状态 1,第 2 行
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'test2'中的标识列指定显式值。

所以我认为正确的写法是:

insert into test2 select [name],age,register_time from test1

就是说不管主键:主键自己会运行的!

首先确定你用的用户是否有更改表的权限
然后insert into voucheritems_base

SELECT * FROM ufdata_888_2006.dbo.voucheritems_base WHERE VT_ID='8052' 这句中,确定voucheritems_base和ufdata_888_2006.dbo.voucheritems_base表结构相同

语句应该是没有太大问题

表voucheritems_base里有一个列是自动增长的标识列。而这个列是由数据库自己维护的,不能由用户去修改。所以在INSERT的时候,必须把除了标识列以外的所有其它列都写出来。

表里有一个字段是自动产生值的,插入数据时,不用给这个字段赋值的.

楼主只要注意以下两点就可以了.
(1)由于ID是自动递增,所以要插入需先执行
SET IDENTITY_INSERT voucheritems_base ON
(2)insert 时不能用*,要把所有的列一一对应