仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'c5erp_bak.dbo.SC_FHD_T' 中为标识列指定显式值。

yuqianpingnihao 2010-09-27 08:24:39
set IDENTITY_INSERT c5erp_bak.dbo.SC_FHD_T ON
INSERT INTO c5erp_bak.dbo.SC_FHD_T
SELECT * FROM SC_FHD_T
WHERE id NOT IN (SELECT id FROM c5erp_bak.dbo.sc_fhd_t)


这样还是不行,请教高手。。。。。
...全文
191 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
abuying 2010-09-27
  • 打赏
  • 举报
回复
加个锁吧。或者使用临时表。
因为又select,又更新的。

set IDENTITY_INSERT c5erp_bak.dbo.SC_FHD_T ON
INSERT INTO c5erp_bak.dbo.SC_FHD_T
SELECT * FROM SC_FHD_T
WHERE id NOT exists (SELECT id FROM c5erp_bak.dbo.sc_fhd_t) with(Rowlock)
喜-喜 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yuqianpingnihao 的回复:]
哎,这里的字段太多。。。。。。。。。郁闷死啦。。。。。有好几百个呢
[/Quote]
if object_id('test.dbo.tb') is not null drop table tb
go
create table tb
(
id int identity(1,1),
p_id int,
photo int,
p_type int,
c_name int,
e_name int,
o_name int
)
go

declare @str varchar(1000)
set @str=''
select @str=@str+','+rtrim(name) from syscolumns where id=object_id('tb')
print @str --,id,p_id,photo,p_type,c_name,e_name,o_name

ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yuqianpingnihao 的回复:]

哎,这里的字段太多。。。。。。。。。郁闷死啦。。。。。有好几百个呢
[/Quote]

你的关键是插入自增列
你选这几个字段插入
做测试

这样明白吗
喜-喜 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yuqianpingnihao 的回复:]
哎,这里的字段太多。。。。。。。。。郁闷死啦。。。。。有好几百个呢
[/Quote]

那就动态链接字段名试试..
yuqianpingnihao 2010-09-27
  • 打赏
  • 举报
回复
哎,这里的字段太多。。。。。。。。。郁闷死啦。。。。。有好几百个呢
ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yuqianpingnihao 的回复:]

插入一条也不行。。。。
[/Quote]

你用我12楼的方法试下
yuqianpingnihao 2010-09-27
  • 打赏
  • 举报
回复
插入一条也不行。。。。
ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
只列部分字段插入

set IDENTITY_INSERT c5erp_bak.dbo.SC_FHD_T ON
INSERT INTO c5erp_bak.dbo.SC_FHD_T(ID,clo1,col2,col3)
SELECT id,col1,col2,col3 FROM SC_FHD_T
WHERE id NOT IN (SELECT id FROM c5erp_bak.dbo.sc_fhd_t)

Rockets_NBA 2010-09-27
  • 打赏
  • 举报
回复
你不答应,
set IDENTITY_INSERT c5erp_bak.dbo.SC_FHD_T ON 他也不答应,他要求你,必须列出所有列名
ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yuqianpingnihao 的回复:]

不行,这么多字段。。。。
[/Quote]
你可以插入几个试下

关键是能不能
插入主键的
yuqianpingnihao 2010-09-27
  • 打赏
  • 举报
回复
字段很多很多,,请问其他办法还有没
yuqianpingnihao 2010-09-27
  • 打赏
  • 举报
回复
不行,这么多字段。。。。
ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
万一还试不行的话
你把要插入的数据和对应的表列名称
一一对应
喜-喜 2010-09-27
  • 打赏
  • 举报
回复
关注一下!另外,IDENTITY_INSERT 设为 on 后要记得关闭!
set IDENTITY_INSERT c5erp_bak.dbo.SC_FHD_T ON
INSERT INTO c5erp_bak.dbo.SC_FHD_T
SELECT * FROM SC_FHD_T
WHERE id NOT IN (SELECT id FROM c5erp_bak.dbo.sc_fhd_t)
set IDENTITY_INSERT c5erp_bak.dbo.SC_FHD_T OFF
ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
你确认这个c5erp_bak.dbo.SC_FHD_T是表名吗?
王向飞 2010-09-27
  • 打赏
  • 举报
回复
插入的时候把你的列名都列出来
ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
你这样试下

set IDENTITY_INSERT c5erp_bak.dbo.SC_FHD_T ON
INSERT INTO c5erp_bak.dbo.SC_FHD_T
SELECT * FROM SC_FHD_T
fengyun142415 2010-09-27
  • 打赏
  • 举报
回复
关注一下
ws_hgo 2010-09-27
  • 打赏
  • 举报
回复
# --(2)当设置identity_insert选项值为 ON的时候,可以插入id.  
# create table #te
# (
# id int identity(1,1),
# col1 varchar(10)
# )
# insert into #te values ('aa')
# insert into #te values ('bb')
# select * from #te
# set identity_insert #te on
# insert into #te(id,col1) values (10,'ff')
#
# set identity_insert #te off
# insert into #te values ('hh')
pengpeng409 2010-09-27
  • 打赏
  • 举报
回复
呵呵。。学习。。。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧