SQL插入语句提示报错,小弟不懂,请教高人,谢谢
来源:百度知道 编辑:UC知道 时间:2024/05/14 10:02:32
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 时不能用*,要把所有的列一一对应