【问题标题】:Create table from rows of another table along with its properties从另一个表的行及其属性创建表
【发布时间】:2013-01-08 06:05:18
【问题描述】:

我有一个名为Table1的表

列名 数据类型 最大长度 精度 刻度 is_nullable 主键 价格浮动 8 53 0 1 0 名称 varchar 180 0 0 1 0 Id_no 整数 4 10 0 1 1 出生日期 3 10 0 1 0

我需要创建另一个名为 Table2 的表,其中表 1 的列名行(以及数据类型、最大长度等属性)应该是我在另一个表中的列,例如

表 2 价格名称 Id_No DOB

(请注意创建表查询也要考虑到属性)

【问题讨论】:

  • 你想创建另一个表还是只选择透视数据?
  • 解决方案必须仅在 SQL 中吗?如果这是 PHP/Python/Ruby/Anything 脚本的后端,那么用那种语言做你想做的事情会相当简单。
  • @WKordos 我想创建一个新表(表 2).. 表 1 的第一列行应该是表 2 的列.. 但其他列中指定的数据类型表 1..
  • @Dan Sullivan:对不起,它只在 SQL 中......
  • 您使用的是哪个 DBMS?甲骨文? PostgreSQL?

标签: sql sql-server


【解决方案1】:

您可以使用select into 创建表的副本:

select  *
into    NewTable
from    OldTable

【讨论】:

  • 我相信 OP 希望能够创建一个表,其字段由 OldTable 的行定义。他希望转置表格,而不是复制现有结构。
  • @Andomar 我不想创建副本。我想创建一个新表,其中我的 table1 的行应该是我的表 2 的列
  • @DanSullivan 没错!但它只是不转置.. 我只需要我的 [column Name] 字段值到我的表 2 的列中。但我的其他列字段值,如数据类型 Maxlength 应该是我的属性
  • 您需要动态数据库特定的 SQL 来执行此操作。如果可能的话,我会在客户端做。
【解决方案2】:
create table table2
as
select * form table1;

【讨论】:

  • 即使这是标准 SQL,SQL Server 也不支持这种语法。他们选择为此实现自己的语法。
【解决方案3】:

您可以动态创建 SQL 语句,然后运行该命令。

DECLARE @dsql nvarchar(max) = N''

SELECT @dsql += QUOTENAME([Column Name]) + ' ' + 
       [Data type] + 
        + CASE WHEN [Data type] = 'varchar' 
               THEN '(' + CAST([Max length] AS nvarchar(4)) + ')' ELSE '' END + ','        
FROM Table1

SELECT @dsql = 'CREATE TABLE Table2 (' + LEFT(@dsql, LEN(@dsql) - 1) + ')'
EXEC sp_executesql @dsql

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2012-11-20
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多