我正在使用select * into
从另一个表创建表并用于SET IDENTITY_INSERT ON
新创建的表以接受包括标识列的数据。
现在我的问题是,有没有办法从另一个现有表(比如表 B)创建一个表(比如表 A),而不会将表 B 的身份属性复制到表 A。
我正在使用select * into
从另一个表创建表并用于SET IDENTITY_INSERT ON
新创建的表以接受包括标识列的数据。
现在我的问题是,有没有办法从另一个现有表(比如表 B)创建一个表(比如表 A),而不会将表 B 的身份属性复制到表 A。
当然,假设TABLEA
看起来像这样:
CREATE TABLE TABLEA (
ID INT PRIMARY KEY IDENTITY(1, 1),
Column1 VARCHAR(50)
)
让我们假设TABLEB
看起来一样。如果我们想在不移动标识列的情况下将数据从TABLEB
其中TABLEA
移动,我们将编写以下语句:
INSERT INTO TABLEA (Column1)
SELECT Column1 FROM TABLEB
这将导致每个新行都TABLEA
获得自己的身份值。
但请注意,您不能发出 a SELECT * FROM TABLEB
,因为这也会选择该ID
列。您必须单独列出您想要的所有字段。但是,一般来说,我认为很多非常有经验的 DBA 和程序员会说这SELECT * FROM Table
真的很危险,因为如果模式发生变化,一切都会中断。你真的想永远是具体的。
SELECT STUFF((SELECT ', ' + c.name FROM sys.columns c where c.object_id = OBJECT_ID('dbo.TABLE_NAME') and c.is_identity <> 1 FOR XML PATH('')),1, 2, '') 作为 CSV 列
这将为您提供每个表的列的逗号分隔列表。将这些语句复制到记事本中以创建可以运行的脚本。