【问题标题】:How do I create a table based on another table [duplicate]如何基于另一个表创建一个表[重复]
【发布时间】: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


    【解决方案1】:

    SQL Server 中没有这样的语法,尽管CREATE TABLE AS ... SELECT 确实存在于 PDW 中。在 SQL Server 中,您可以使用此查询来创建一个空表:

    SELECT * INTO schema.newtable FROM schema.oldtable WHERE 1 = 0;
    

    (如果您想复制表包括所有数据,则省略WHERE 子句。)

    请注意,这会创建相同的列结构(包括 IDENTITY 列,如果存在),但不会复制任何索引、约束、触发器等。

    【讨论】:

    【解决方案2】:
    select * into newtable from oldtable
    

    【讨论】:

    • 这是一个 ms sql server 问题
    • @Jonathan 还有什么问题?
    • 这会精确地保留列的类型还是“压缩”数据?例如,选择 varchar(5) 而不是 varchar(20),因为没有一个值超过 5 个字符?
    • @Leonid 我没有找到任何书面来源,但看起来它完全保留了结构:CREATE TABLE #origin (how_long varchar(50)) SELECT * INTO #new FROM #origin WHERE 1 = 0 EXEC tempdb..sp_help '#new'
    • 这不是一个正确的答案,因为 CREATE...LIKE 只复制模式,并没有复制数据,但是这个查询也会复制数据
    猜你喜欢
    • 2017-11-03
    • 2022-12-11
    • 2021-03-15
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多