【发布时间】:2013-08-17 17:25:38
【问题描述】:
我想根据另一个表的定义创建一个表。
我来自 oracle,我通常会这样做:
CREATE TABLE schema.newtable AS SELECT * FROM schema.oldtable;
我似乎无法在 SQL Server 2008 中执行此操作。
【问题讨论】:
标签: sql-server sql-server-2008 create-table
我想根据另一个表的定义创建一个表。
我来自 oracle,我通常会这样做:
CREATE TABLE schema.newtable AS SELECT * FROM schema.oldtable;
我似乎无法在 SQL Server 2008 中执行此操作。
【问题讨论】:
标签: sql-server sql-server-2008 create-table
SQL Server 中没有这样的语法,尽管CREATE TABLE AS ... SELECT 确实存在于 PDW 中。在 SQL Server 中,您可以使用此查询来创建一个空表:
SELECT * INTO schema.newtable FROM schema.oldtable WHERE 1 = 0;
(如果您想复制表包括所有数据,则省略WHERE 子句。)
请注意,这会创建相同的列结构(包括 IDENTITY 列,如果存在),但不会复制任何索引、约束、触发器等。
【讨论】:
1 = 0为真时不能返回行)。
SELECT INTO 默认情况下会保留 IDENTITY 列,但其他约束和索引,您必须自己创建。
select * into newtable from oldtable
【讨论】:
varchar(5) 而不是 varchar(20),因为没有一个值超过 5 个字符?
CREATE TABLE #origin (how_long varchar(50)) SELECT * INTO #new FROM #origin WHERE 1 = 0 EXEC tempdb..sp_help '#new'