我正在使用select * into
从另一个表创建一个表,并使用SET IDENTITY_INSERT ON
为新创建的表接受包含标识列的数据。
现在我的问题是,有没有办法从另一个现有表(比如表B)创建一个表(比如表A),而不将表B的标识属性复制到表A.
答案 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
这将为您提供逗号分隔的每个表的列列表。将这些语句复制到记事本中以创建可以运行的脚本。