T-SQL使用主键创建表

时间:2013-08-29 18:15:29

标签: tsql sql-server-2008-r2

您好我想基于另一个创建一个新表并创建主键。

目前这就是我的做法。表B没有定义主键。但是我想在表A中创建它们。有没有办法使用这个select top 0语句来做到这一点?或者在创建tableA之后是否需要执行ALTER TABLE?

由于

select TOP 0 *
INTO [tableA]
FROM [tableB]

2 个答案:

答案 0 :(得分:5)

除了SELECT INTO属性之外,

IDENTITY不支持复制任何索引,约束,触发器甚至计算列和其他表属性(只要不应用表达式IDENTITY列。

因此,您必须在创建并填充表格后添加约束。

答案 1 :(得分:1)

简短的回答是否定的。 SELECT INTO将始终创建一个HEAP表,并根据Books Online

  

源表中定义的索引,约束和触发器不是   转移到新表,也不能在中指定   SELECT ... INTO语句。如果需要这些对象,则必须   在执行SELECT ... INTO语句后创建它们。

因此,在执行SELECT INTO之后,您需要执行ALTER TABLE或CREATE UNIQUE INDEX以添加主键。

此外,如果dbo.TableB还没有IDENTITY列(或者如果它确实存在并且您希望由于某种原因将其遗漏),则需要创建一个人工主键列(而不是使用现有列)在dbo.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);