Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从另一个表的行及其属性创建表_Sql_Sql Server - Fatal编程技术网

Sql 从另一个表的行及其属性创建表

Sql 从另一个表的行及其属性创建表,sql,sql-server,Sql,Sql Server,我有一个名为Table1 Column Name Data type Max length Precision Scale is_nullable Primary Key Price float 8 53 0 1 0 Name varchar 180 0 0 1

我有一个名为
Table1

Column Name Data type Max length Precision Scale is_nullable Primary Key Price float 8 53 0 1 0 Name varchar 180 0 0 1 0 Id_no int 4 10 0 1 1 DOB date 3 10 0 1 0
(请注意,创建表查询还应考虑属性)

您可以使用
选择进入
来创建表的副本:

select  *
into    NewTable
from    OldTable

您可以动态创建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

我相信OP希望能够创建一个表,其字段由OldTable的行定义。他想转置表格,而不是复制现有结构。@Andomar我不想创建副本。。我想创建一个新表,表1的行应该是表的列2@DanSullivan确切地但这并不是转置。。我只需要将我的[column Name]字段值添加到表2的列中。但我的其他列字段值(如数据类型Maxlength)应该是我的属性。要做到这一点,需要动态数据库特定的SQL。如果可能的话,我会在客户端完成。您想创建另一个表还是只选择数据透视?解决方案必须完全使用SQL吗?如果这是PHP/Python/Ruby/Anything脚本的后端,那么用该语言做您想要做的事情就相当简单了。@wk我想创建一个新表(表2)。。其中,表1的第1列行应为表2的第1列。。但是在表1的其他列中指定的数据类型中,@Dan Sullivan:对不起,它只在SQL中使用..您使用的是哪种DBMS?神谕PostgreSQL?即使这是标准SQL,SQL Server也不支持此语法。他们选择为此实现自己的语法。
create table table2
as
select * form table1;
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