您好,我想根据另一个表创建一个新表并创建主键。
目前这就是我正在做的事情。表 B 没有定义主键。但我想在表 A 中创建它们。有没有办法使用这个 select top 0 语句来做到这一点?或者我需要在创建 tableA 后执行 ALTER TABLE 吗?
谢谢
select TOP 0 *
INTO [tableA]
FROM [tableB]
您好,我想根据另一个表创建一个新表并创建主键。
目前这就是我正在做的事情。表 B 没有定义主键。但我想在表 A 中创建它们。有没有办法使用这个 select top 0 语句来做到这一点?或者我需要在创建 tableA 后执行 ALTER TABLE 吗?
谢谢
select TOP 0 *
INTO [tableA]
FROM [tableB]
SELECT INTO
不支持复制任何索引、约束、触发器甚至计算列和其他表属性,除了IDENTITY
属性(只要您不将表达式应用于IDENTITY
列。
因此,您必须在创建和填充表后添加约束。
最简洁的答案是不。SELECT INTO 将始终创建一个 HEAP 表,并且根据Books Online:
源表中定义的索引、约束和触发器不会转移到新表中,也不能在 SELECT...INTO 语句中指定。如果需要这些对象,则必须在执行 SELECT...INTO 语句后创建它们。
因此,在执行 SELECT INTO 之后,您需要执行 ALTER TABLE 或 CREATE UNIQUE INDEX 以添加主键。
此外,如果 dbo.TableB 还没有 IDENTITY 列(或者如果它有并且您出于某种原因想要将其排除在外),并且您需要创建一个人工主键列(而不是使用 dbo.table 中的现有列)。 TableB 作为新的主键),您可以使用 IDENTITY 函数创建候选键列。但是您仍然必须在事后将约束添加到 TableA 以使其成为主键,因为仅 IDENTITY 函数/属性本身并不能做到这一点。
-- This statement will create a HEAP table
SELECT Col1, Col2, IDENTITY(INT,1,1) Col3
INTO dbo.MyTable
FROM dbo.AnotherTable;
-- This statement will create a clustered PK
ALTER TABLE dbo.MyTable
ADD CONSTRAINT PK_MyTable_Col3 PRIMARY KEY (Col3);