消息 8102,级别 16,帮忙看看怎么回事啊

qq_41032699 2018-08-15 03:33:30
想把下面图片里的bk_id里的数值都加29086要怎么做啊?我写的下面的执行会出错大神们帮忙看看


消息 8102,级别 16,状态 1,第 1 行
无法更新标识列 'bk_id'。



update tb_info set bk_id=bk_id+'29086' where bk_id=bk_id

...全文
535 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 版主 2018-08-16
  • 打赏
  • 举报
回复
引用 11 楼 sinat_28984567 的回复:
为什么有这个需求,一般来说主键都不会随意更新的,这个主键也可能是其他表的外键,更改主键可能会造成很多问题


估计是两个数据库要合并,主键有重复的。
吉普赛的歌 版主 2018-08-15
  • 打赏
  • 举报
回复
引用 16 楼 qq_41032699 的回复:
可以了,感谢大神


恭喜, 没事就结贴吧。
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
引用 15 楼 yenange 的回复:
不好意思, 忘记 + 29086 了。

你把下面的脚本再执行一次就好了:
--1. 如果有同名表删除
IF OBJECT_ID('[dbo].[tb_info_tmp]') IS NOT NULL DROP TABLE [dbo].[tb_info_tmp]
IF OBJECT_ID('[dbo].[tb_info_bak_20180815]') IS NOT NULL DROP TABLE [dbo].tb_info_bak_20180815
GO
--2. 创建中转表 及 约束
CREATE TABLE [dbo].[tb_info_tmp](
[bk_id] [int] IDENTITY(1,1) NOT NULL,
[bk_isbn] [nvarchar](50) NULL,
[bk_ean13] [nvarchar](50) NULL,
[bk_name] [nvarchar](100) NULL,
[bk_subname] [nvarchar](100) NULL,
[bk_keyname] [nvarchar](200) NULL,
[bk_auth] [nvarchar](100) NULL,
[bk_class] [nvarchar](50) NULL,
[bk_kind] [nvarchar](100) NULL,
[prs_nme] [nvarchar](100) NULL,
[pub_plc] [nvarchar](100) NULL,
[pub_tme] [nvarchar](50) NULL,
[page_ct] [nvarchar](20) NULL,
[bk_pric] [nvarchar](20) NULL,
[bk_edit] [nvarchar](50) NULL,
[bk_vol] [nvarchar](50) NULL,
[bk_size] [nvarchar](50) NULL,
[bk_share] [nvarchar](100) NULL,
[bk_print] [nvarchar](20) NULL,
[bk_lang] [nvarchar](20) NULL,
[bk_seri] [nvarchar](150) NULL,
[bk_oth] [ntext] NULL,
[bk_py] [nchar](100) NULL,
[ipt_tme] [datetime] NULL,
[bk_state] [int] NULL,
[bk_type] [nvarchar](20) NULL,
[bk_fz] [ntext] NULL,
[bk_905] [ntext] NULL,
[user_id] [nvarchar](50) NULL,
[bk_pc] [nvarchar](50) NULL,
[updatetimes] [int] NOT NULL,
[bk_sysid] [int] NULL,
[getdatatimes] [int] NULL,
[lb_suit] [bit] NULL,
[exp1] [nvarchar](100) NULL,
[exp2] [nvarchar](100) NULL,
[exp3] [nvarchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_book_updatetimes2] DEFAULT (0) FOR [updatetimes]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_info_getdatatimes2] DEFAULT (0) FOR [getdatatimes]
GO
--帮你加主键,主键一般都是必须的
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT PK_tb_info_2 PRIMARY KEY CLUSTERED([bk_id])
GO
--3. 将源表数据插入到中转表
SET IDENTITY_INSERT [dbo].[tb_info_tmp] ON
INSERT INTO [dbo].[tb_info_tmp]
([bk_id]
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3])
SELECT [bk_id]+29086
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3]
FROM tb_info
SET IDENTITY_INSERT [dbo].[tb_info_tmp] OFF
--4. 互换表名
EXEC sp_rename 'tb_info','tb_info_bak_20180815_2'
EXEC sp_rename 'tb_info_tmp','tb_info'


可以了,感谢大神
吉普赛的歌 版主 2018-08-15
  • 打赏
  • 举报
回复
不好意思, 忘记 + 29086 了。

你把下面的脚本再执行一次就好了:
--1. 如果有同名表删除
IF OBJECT_ID('[dbo].[tb_info_tmp]') IS NOT NULL DROP TABLE [dbo].[tb_info_tmp]
IF OBJECT_ID('[dbo].[tb_info_bak_20180815]') IS NOT NULL DROP TABLE [dbo].tb_info_bak_20180815
GO
--2. 创建中转表 及 约束
CREATE TABLE [dbo].[tb_info_tmp](
[bk_id] [int] IDENTITY(1,1) NOT NULL,
[bk_isbn] [nvarchar](50) NULL,
[bk_ean13] [nvarchar](50) NULL,
[bk_name] [nvarchar](100) NULL,
[bk_subname] [nvarchar](100) NULL,
[bk_keyname] [nvarchar](200) NULL,
[bk_auth] [nvarchar](100) NULL,
[bk_class] [nvarchar](50) NULL,
[bk_kind] [nvarchar](100) NULL,
[prs_nme] [nvarchar](100) NULL,
[pub_plc] [nvarchar](100) NULL,
[pub_tme] [nvarchar](50) NULL,
[page_ct] [nvarchar](20) NULL,
[bk_pric] [nvarchar](20) NULL,
[bk_edit] [nvarchar](50) NULL,
[bk_vol] [nvarchar](50) NULL,
[bk_size] [nvarchar](50) NULL,
[bk_share] [nvarchar](100) NULL,
[bk_print] [nvarchar](20) NULL,
[bk_lang] [nvarchar](20) NULL,
[bk_seri] [nvarchar](150) NULL,
[bk_oth] [ntext] NULL,
[bk_py] [nchar](100) NULL,
[ipt_tme] [datetime] NULL,
[bk_state] [int] NULL,
[bk_type] [nvarchar](20) NULL,
[bk_fz] [ntext] NULL,
[bk_905] [ntext] NULL,
[user_id] [nvarchar](50) NULL,
[bk_pc] [nvarchar](50) NULL,
[updatetimes] [int] NOT NULL,
[bk_sysid] [int] NULL,
[getdatatimes] [int] NULL,
[lb_suit] [bit] NULL,
[exp1] [nvarchar](100) NULL,
[exp2] [nvarchar](100) NULL,
[exp3] [nvarchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_book_updatetimes2] DEFAULT (0) FOR [updatetimes]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_info_getdatatimes2] DEFAULT (0) FOR [getdatatimes]
GO
--帮你加主键,主键一般都是必须的
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT PK_tb_info_2 PRIMARY KEY CLUSTERED([bk_id])
GO
--3. 将源表数据插入到中转表
SET IDENTITY_INSERT [dbo].[tb_info_tmp] ON
INSERT INTO [dbo].[tb_info_tmp]
([bk_id]
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3])
SELECT [bk_id]+29086
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3]
FROM tb_info
SET IDENTITY_INSERT [dbo].[tb_info_tmp] OFF
--4. 互换表名
EXEC sp_rename 'tb_info','tb_info_bak_20180815_2'
EXEC sp_rename 'tb_info_tmp','tb_info'

二月十六 版主 2018-08-15
  • 打赏
  • 举报
回复
引用 12 楼 qq_41032699 的回复:
[quote=引用 11 楼 sinat_28984567 的回复:]
[quote=引用 4 楼 qq_41032699 的回复:]
[quote=引用 2 楼 zjcxc 的回复:]
无法更新标识列 'bk_id'。
--------------------------- 错误提示很清楚了,可以考虑把数据满足条件数据删除,然后再重新 insert 进去,insert 的时候指定 id 为你要的值

这一列每行的值都不一样,重新insert怎么弄啊?小白一枚[/quote]
为什么有这个需求,一般来说主键都不会随意更新的,这个主键也可能是其他表的外键,更改主键可能会造成很多问题[/quote]
因为是想把a数据库的这个表附加到B数据库上,但是bk_id这个值要改一下才不重复。[/quote]
直接插入数据不插入主键,B库表上的主键也会自动生成的
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
引用 10 楼 yenange 的回复:
--1. 如果有同名表删除
IF OBJECT_ID('[dbo].[tb_info_tmp]') IS NOT NULL DROP TABLE [dbo].[tb_info_tmp]
IF OBJECT_ID('[dbo].[tb_info_bak_20180815]') IS NOT NULL DROP TABLE [dbo].tb_info_bak_20180815
GO
--2. 创建中转表 及 约束
CREATE TABLE [dbo].[tb_info_tmp](
[bk_id] [int] IDENTITY(1,1) NOT NULL,
[bk_isbn] [nvarchar](50) NULL,
[bk_ean13] [nvarchar](50) NULL,
[bk_name] [nvarchar](100) NULL,
[bk_subname] [nvarchar](100) NULL,
[bk_keyname] [nvarchar](200) NULL,
[bk_auth] [nvarchar](100) NULL,
[bk_class] [nvarchar](50) NULL,
[bk_kind] [nvarchar](100) NULL,
[prs_nme] [nvarchar](100) NULL,
[pub_plc] [nvarchar](100) NULL,
[pub_tme] [nvarchar](50) NULL,
[page_ct] [nvarchar](20) NULL,
[bk_pric] [nvarchar](20) NULL,
[bk_edit] [nvarchar](50) NULL,
[bk_vol] [nvarchar](50) NULL,
[bk_size] [nvarchar](50) NULL,
[bk_share] [nvarchar](100) NULL,
[bk_print] [nvarchar](20) NULL,
[bk_lang] [nvarchar](20) NULL,
[bk_seri] [nvarchar](150) NULL,
[bk_oth] [ntext] NULL,
[bk_py] [nchar](100) NULL,
[ipt_tme] [datetime] NULL,
[bk_state] [int] NULL,
[bk_type] [nvarchar](20) NULL,
[bk_fz] [ntext] NULL,
[bk_905] [ntext] NULL,
[user_id] [nvarchar](50) NULL,
[bk_pc] [nvarchar](50) NULL,
[updatetimes] [int] NOT NULL,
[bk_sysid] [int] NULL,
[getdatatimes] [int] NULL,
[lb_suit] [bit] NULL,
[exp1] [nvarchar](100) NULL,
[exp2] [nvarchar](100) NULL,
[exp3] [nvarchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_book_updatetimes1] DEFAULT (0) FOR [updatetimes]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_info_getdatatimes1] DEFAULT (0) FOR [getdatatimes]
GO
--帮你加主键,主键一般都是必须的
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT PK_tb_info_1 PRIMARY KEY CLUSTERED([bk_id])
GO
--3. 将源表数据插入到中转表
SET IDENTITY_INSERT [dbo].[tb_info_tmp] ON
INSERT INTO [dbo].[tb_info_tmp]
([bk_id]
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3])
SELECT [bk_id]
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3]
FROM tb_info
SET IDENTITY_INSERT [dbo].[tb_info_tmp] OFF
--4. 互换表名
EXEC sp_rename 'tb_info','tb_info_bak_20180815'
EXEC sp_rename 'tb_info_tmp','tb_info'

非常感谢!写了这么多!执行完这个还怎么弄啊我执行了一下成功了,但是bk_id的值没变呀
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
引用 11 楼 sinat_28984567 的回复:
[quote=引用 4 楼 qq_41032699 的回复:]
[quote=引用 2 楼 zjcxc 的回复:]
无法更新标识列 'bk_id'。
--------------------------- 错误提示很清楚了,可以考虑把数据满足条件数据删除,然后再重新 insert 进去,insert 的时候指定 id 为你要的值

这一列每行的值都不一样,重新insert怎么弄啊?小白一枚[/quote]
为什么有这个需求,一般来说主键都不会随意更新的,这个主键也可能是其他表的外键,更改主键可能会造成很多问题[/quote]
因为是想把a数据库的这个表附加到B数据库上,但是bk_id这个值要改一下才不重复。
二月十六 版主 2018-08-15
  • 打赏
  • 举报
回复
引用 4 楼 qq_41032699 的回复:
[quote=引用 2 楼 zjcxc 的回复:]
无法更新标识列 'bk_id'。
--------------------------- 错误提示很清楚了,可以考虑把数据满足条件数据删除,然后再重新 insert 进去,insert 的时候指定 id 为你要的值

这一列每行的值都不一样,重新insert怎么弄啊?小白一枚[/quote]
为什么有这个需求,一般来说主键都不会随意更新的,这个主键也可能是其他表的外键,更改主键可能会造成很多问题
吉普赛的歌 版主 2018-08-15
  • 打赏
  • 举报
回复
--1. 如果有同名表删除
IF OBJECT_ID('[dbo].[tb_info_tmp]') IS NOT NULL DROP TABLE [dbo].[tb_info_tmp]
IF OBJECT_ID('[dbo].[tb_info_bak_20180815]') IS NOT NULL DROP TABLE [dbo].tb_info_bak_20180815
GO
--2. 创建中转表 及 约束
CREATE TABLE [dbo].[tb_info_tmp](
[bk_id] [int] IDENTITY(1,1) NOT NULL,
[bk_isbn] [nvarchar](50) NULL,
[bk_ean13] [nvarchar](50) NULL,
[bk_name] [nvarchar](100) NULL,
[bk_subname] [nvarchar](100) NULL,
[bk_keyname] [nvarchar](200) NULL,
[bk_auth] [nvarchar](100) NULL,
[bk_class] [nvarchar](50) NULL,
[bk_kind] [nvarchar](100) NULL,
[prs_nme] [nvarchar](100) NULL,
[pub_plc] [nvarchar](100) NULL,
[pub_tme] [nvarchar](50) NULL,
[page_ct] [nvarchar](20) NULL,
[bk_pric] [nvarchar](20) NULL,
[bk_edit] [nvarchar](50) NULL,
[bk_vol] [nvarchar](50) NULL,
[bk_size] [nvarchar](50) NULL,
[bk_share] [nvarchar](100) NULL,
[bk_print] [nvarchar](20) NULL,
[bk_lang] [nvarchar](20) NULL,
[bk_seri] [nvarchar](150) NULL,
[bk_oth] [ntext] NULL,
[bk_py] [nchar](100) NULL,
[ipt_tme] [datetime] NULL,
[bk_state] [int] NULL,
[bk_type] [nvarchar](20) NULL,
[bk_fz] [ntext] NULL,
[bk_905] [ntext] NULL,
[user_id] [nvarchar](50) NULL,
[bk_pc] [nvarchar](50) NULL,
[updatetimes] [int] NOT NULL,
[bk_sysid] [int] NULL,
[getdatatimes] [int] NULL,
[lb_suit] [bit] NULL,
[exp1] [nvarchar](100) NULL,
[exp2] [nvarchar](100) NULL,
[exp3] [nvarchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_book_updatetimes1] DEFAULT (0) FOR [updatetimes]
GO
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT [DF_tb_info_getdatatimes1] DEFAULT (0) FOR [getdatatimes]
GO
--帮你加主键,主键一般都是必须的
ALTER TABLE [dbo].[tb_info_tmp] ADD CONSTRAINT PK_tb_info_1 PRIMARY KEY CLUSTERED([bk_id])
GO
--3. 将源表数据插入到中转表
SET IDENTITY_INSERT [dbo].[tb_info_tmp] ON
INSERT INTO [dbo].[tb_info_tmp]
([bk_id]
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3])
SELECT [bk_id]
,[bk_isbn]
,[bk_ean13]
,[bk_name]
,[bk_subname]
,[bk_keyname]
,[bk_auth]
,[bk_class]
,[bk_kind]
,[prs_nme]
,[pub_plc]
,[pub_tme]
,[page_ct]
,[bk_pric]
,[bk_edit]
,[bk_vol]
,[bk_size]
,[bk_share]
,[bk_print]
,[bk_lang]
,[bk_seri]
,[bk_oth]
,[bk_py]
,[ipt_tme]
,[bk_state]
,[bk_type]
,[bk_fz]
,[bk_905]
,[user_id]
,[bk_pc]
,[updatetimes]
,[bk_sysid]
,[getdatatimes]
,[lb_suit]
,[exp1]
,[exp2]
,[exp3]
FROM tb_info
SET IDENTITY_INSERT [dbo].[tb_info_tmp] OFF
--4. 互换表名
EXEC sp_rename 'tb_info','tb_info_bak_20180815'
EXEC sp_rename 'tb_info_tmp','tb_info'
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
你在那个表上右键, 如下图操作

把得到的脚本贴出来, 我帮你写一个天衣无缝的。
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
你在那个表上右键, 如下图操作

把得到的脚本贴出来, 我帮你写一个天衣无缝的。

USE [蒙文]
GO

/****** Object: Table [dbo].[tb_info] Script Date: 2018/8/15 16:10:32 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tb_info](
[bk_id] [int] IDENTITY(1,1) NOT NULL,
[bk_isbn] [nvarchar](50) NULL,
[bk_ean13] [nvarchar](50) NULL,
[bk_name] [nvarchar](100) NULL,
[bk_subname] [nvarchar](100) NULL,
[bk_keyname] [nvarchar](200) NULL,
[bk_auth] [nvarchar](100) NULL,
[bk_class] [nvarchar](50) NULL,
[bk_kind] [nvarchar](100) NULL,
[prs_nme] [nvarchar](100) NULL,
[pub_plc] [nvarchar](100) NULL,
[pub_tme] [nvarchar](50) NULL,
[page_ct] [nvarchar](20) NULL,
[bk_pric] [nvarchar](20) NULL,
[bk_edit] [nvarchar](50) NULL,
[bk_vol] [nvarchar](50) NULL,
[bk_size] [nvarchar](50) NULL,
[bk_share] [nvarchar](100) NULL,
[bk_print] [nvarchar](20) NULL,
[bk_lang] [nvarchar](20) NULL,
[bk_seri] [nvarchar](150) NULL,
[bk_oth] [ntext] NULL,
[bk_py] [nchar](100) NULL,
[ipt_tme] [datetime] NULL,
[bk_state] [int] NULL,
[bk_type] [nvarchar](20) NULL,
[bk_fz] [ntext] NULL,
[bk_905] [ntext] NULL,
[user_id] [nvarchar](50) NULL,
[bk_pc] [nvarchar](50) NULL,
[updatetimes] [int] NOT NULL,
[bk_sysid] [int] NULL,
[getdatatimes] [int] NULL,
[lb_suit] [bit] NULL,
[exp1] [nvarchar](100) NULL,
[exp2] [nvarchar](100) NULL,
[exp3] [nvarchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[tb_info] ADD CONSTRAINT [DF_tb_book_updatetimes] DEFAULT (0) FOR [updatetimes]
GO

ALTER TABLE [dbo].[tb_info] ADD CONSTRAINT [DF_tb_info_getdatatimes] DEFAULT (0) FOR [getdatatimes]
GO


吉普赛的歌 版主 2018-08-15
  • 打赏
  • 举报
回复
你在那个表上右键, 如下图操作

把得到的脚本贴出来, 我帮你写一个天衣无缝的。
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
IF OBJECT_ID('t_tmp') IS NOT NULL DROP TABLE t_tmp
IF OBJECT_ID('t_bak_20180815') IS NOT NULL DROP TABLE t_bak_20180815
GO
CREATE TABLE t(
bk_id INT IDENTITY(1,1) PRIMARY KEY,
n NVARCHAR(10)
)
GO
INSERT INTO t(n) VALUES ('abc');
GO
/*
UPDATE t SET bk_id = bk_id+20986
无法更新标识列 'bk_id'。
*/
----------- 以上为测试表及测试数据 ----------

GO
--1. 创建临时表
CREATE TABLE t_tmp(
bk_id INT IDENTITY(1,1) PRIMARY KEY,
n NVARCHAR(10)
)
GO
--2. 插入中转表
SET IDENTITY_INSERT t_tmp ON
INSERT INTO t_tmp(bk_id,n)
SELECT bk_id+0 AS bk_id,n FROM t
SET IDENTITY_INSERT t_tmp OFF
GO
--3. 两表换名
EXEC sp_rename 't','t_bak_20180815'
EXEC sp_rename 't_tmp','t'
GO
SELECT * FROM t;
/*
bk_id n
1 abc
*/


关键在于标识列, 这个没办法修改, 只能创建新表, 插入后再换表名。

看不懂
吉普赛的歌 版主 2018-08-15
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
IF OBJECT_ID('t_tmp') IS NOT NULL DROP TABLE t_tmp
IF OBJECT_ID('t_bak_20180815') IS NOT NULL DROP TABLE t_bak_20180815
GO
CREATE TABLE t(
bk_id INT IDENTITY(1,1) PRIMARY KEY,
n NVARCHAR(10)
)
GO
INSERT INTO t(n) VALUES ('abc');
GO
/*
UPDATE t SET bk_id = bk_id+20986
无法更新标识列 'bk_id'。
*/
----------- 以上为测试表及测试数据 ----------

GO
--1. 创建临时表
CREATE TABLE t_tmp(
bk_id INT IDENTITY(1,1) PRIMARY KEY,
n NVARCHAR(10)
)
GO
--2. 插入中转表
SET IDENTITY_INSERT t_tmp ON
INSERT INTO t_tmp(bk_id,n)
SELECT bk_id+0 AS bk_id,n FROM t
SET IDENTITY_INSERT t_tmp OFF
GO
--3. 两表换名
EXEC sp_rename 't','t_bak_20180815'
EXEC sp_rename 't_tmp','t'
GO
SELECT * FROM t;
/*
bk_id n
1 abc
*/


关键在于标识列, 这个没办法修改, 只能创建新表, 插入后再换表名。
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
引用 2 楼 zjcxc 的回复:
无法更新标识列 'bk_id'。
--------------------------- 错误提示很清楚了,可以考虑把数据满足条件数据删除,然后再重新 insert 进去,insert 的时候指定 id 为你要的值

这一列每行的值都不一样,重新insert怎么弄啊?小白一枚
zjcxc 元老 2018-08-15
  • 打赏
  • 举报
回复
无法更新标识列 'bk_id'。
--------------------------- 错误提示很清楚了,可以考虑把数据满足条件数据删除,然后再重新 insert 进去,insert 的时候指定 id 为你要的值
qq_41032699 2018-08-15
  • 打赏
  • 举报
回复
去掉主键属性还是提示这个错误
二月十六 版主 2018-08-15
  • 打赏
  • 举报
回复
bk_id是主键不能更新,如果非得更新,先把主键属性去掉,然后再更新,然后再改回主键,另外where条件不用加

34,594

社区成员

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

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