2

我正在使用select * into从另一个表创建表并用于SET IDENTITY_INSERT ON新创建的表以接受包括标识列的数据。

现在我的问题是,有没有办法从另一个现有表(比如表 B)创建一个表(比如表 A),而不会将表 B 的身份属性复制到表 A。

4

2 回答 2

2

当然,假设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真的很危险,因为如果模式发生变化,一切都会中断。你真的想永远是具体的。

于 2013-03-07T11:11:19.203 回答
0

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 列

这将为您提供每个表的列的逗号分隔列表。将这些语句复制到记事本中以创建可以运行的脚本。

于 2013-03-07T11:32:47.213 回答