从现有表创建新表没有要复制的标识属性

时间:2013-03-07 11:07:29

标签: sql-server tsql

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

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

2 个答案:

答案 0 :(得分: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中的每一个新行都获得自己的标识值。

但请注意,您无法发出SELECT * FROM TABLEB,因为这也会选择ID列。您必须单独列出所需的所有字段。但是,一般来说,我认为很多非常有经验的DBA和程序员会说SELECT * FROM Table非常危险,因为如果架构改变了一切,那么就会发生。你真的希望 总是 具体。

答案 1 :(得分:0)

SELECT STUFF((SELECT',' + c.name FROM sys.columns c,其中c.object_id = OBJECT_ID(' dbo.TABLE_NAME')和c.is_identity< > 1 FOR XML PATH('')),1,2,'')AS CSVColumn

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