34,835
社区成员




--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'
--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'
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
*/