如何解决如何将带有标识列的表数据和结构及其值复制到同一数据库中的另一个表只需更改表名
我无法将表数据和结构复制到另一个表,因为我想保留 Identity 列的 Id
列并保留其原始值而不是从 1 开始
我使用下面的 sql 插入除 ID
到 MY_TABLE
的 MY_TABLE_NEW
列之外的所有数据,因为它有错误说明
仅当使用列列表且 IDENTITY_INSERT 为 ON 时,才能为表“My_TABLE_NEW”中的标识列指定显式值。
但我已将其设置为如下 sql:
IF NOT EXISTS (select * from sys.objects where name = 'My_TABLE_NEW')
BEGIN
CREATE TABLE [dbo].[My_TABLE_NEW]
(
[ID] [int] IDENTITY(1,1) NOT NULL,[OBJECT_ID] [int] NOT NULL,[YEAR_MONTH] [int] NOT NULL,CONSTRAINT [PK_My_TABLE_NEW]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF,STATISTICS_norECOmpuTE = OFF,IGnorE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'My_TABLE_NEW')
BEGIN
SET IDENTITY_INSERT My_TABLE_NEW ON
INSERT INTO My_TABLE_NEW
SELECT [ID],[OBJECT_ID],[YEAR_MONTH]
FROM My_TABLE
SET IDENTITY_INSERT My_TABLE_NEW OFF
END
GO
有什么问题?
解决方法
尝试使用列名插入:
key
,
当现有标识列被选入新表时,新列将继承 IDENTITY 属性,除非满足以下条件之一:
The SELECT statement contains a join,GROUP BY clause,or aggregate function.
Multiple SELECT statements are joined by using UNION.
The identity column is listed more than one time in the select list.
The identity column is part of an expression.
The identity column is from a remote data source.
这意味着您可以使用 SELECT INTO
复制表,同时保留标识列,并且可以在后面添加 PK。
SELECT *
INTO My_TABLE_NEW
FROM My_TABLE
这是一个关于 fiddle 的演示。
,您可以为此使用内置工具 sp_rename
,只要您只是重命名表而不是尝试创建它的副本。
EXEC sp_rename 'My_TABLE','My_TABLE_NEW'
GO;
如果要创建副本,则只需执行以下操作:
SELECT *
INTO My_TABLE_NEW
FROM My_TABLE
注意:如果这样做,则必须重新添加任何键约束、计算值列等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。