Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 server 从任意SQL查询生成CREATE TABLE语句_Sql Server_Sql Server 2012_Ssms_Ssms 2012 - Fatal编程技术网

Sql server 从任意SQL查询生成CREATE TABLE语句

Sql server 从任意SQL查询生成CREATE TABLE语句,sql-server,sql-server-2012,ssms,ssms-2012,Sql Server,Sql Server 2012,Ssms,Ssms 2012,是否有脚本/过程/函数可以从任意SQL查询生成CREATETABLE语句 在构建过程时,我希望有一种快速生成临时表的方法,而不必查看查询中引用的所有表的表定义 简单的例子: SELECT p.pat_id, pat_name, enc_id, admsn_time, disch_time FROM patient p INNER JOIN encounter e ON p.pat_id=e.pat_id WHERE admsn_time >= '01/01/2014'

是否有脚本/过程/函数可以从任意SQL查询生成CREATETABLE语句

在构建过程时,我希望有一种快速生成临时表的方法,而不必查看查询中引用的所有表的表定义

简单的例子:

SELECT p.pat_id, pat_name, 
       enc_id, admsn_time, disch_time
FROM   patient p
INNER JOIN encounter e ON p.pat_id=e.pat_id
WHERE  admsn_time >= '01/01/2014'
将从系统表中检索生成列的数据定义:

-- randomly-generated table name
CREATE TABLE #random_name (
  PAT_ID      VARCHAR(18) NOT NULL,
  PAT_NAME    VARCHAR(200),
  ENC_ID      NUMERIC(18,0) NOT NULL,
  ADMSN_TIME  DATE,
  DISCH_TIME  DATE
)
SSMS工作流程:

选择文本 右键单击,选择生成创建表语句函数/script/proc called;结果放在剪贴板上 将光标放置在所需位置 粘贴 使用

执行该语句时,将创建表

使用


执行该语句时,将创建表

这是一个小技巧,但您可以尝试在表格中进行选择,请参见第3行:

SELECT p.pat_id, pat_name, 
   enc_id, admsn_time, disch_time
INTO delete_me
FROM   patient p
INNER JOIN encounter e ON p.pat_id=e.pat_id
WHERE  admsn_time >= '01/01/2014'
然后,您可以高亮显示SSMS中的delete_me表,右键单击并生成创建表脚本


最后,您需要删除表delete\u me以进行清理。

这有点像黑客,但您可以尝试选择一个表,请参见第3行:

SELECT p.pat_id, pat_name, 
   enc_id, admsn_time, disch_time
INTO delete_me
FROM   patient p
INNER JOIN encounter e ON p.pat_id=e.pat_id
WHERE  admsn_time >= '01/01/2014'
然后,您可以高亮显示SSMS中的delete_me表,右键单击并生成创建表脚本


最后,您需要删除表delete\u me以进行清理。

首先,我将创建查询的存储过程。它使我以后不会忘记它

其次,我将编写一个查询来为我生成表:

DECLARE @CREATE_TABLE_QUERY NVARCHAR(MAX) = N'';


SELECT 
    @CREATE_TABLE_QUERY += ', ' + name + ' ' + UPPER(system_type_name) + CHAR(13) + CHAR(10) + CHAR(9)

FROM 
    sys.dm_exec_describe_first_result_set('YOUR_PROCEDURE_NAME_HERE', NULL, 1);


SELECT 
    @CREATE_TABLE_QUERY = N'CREATE TABLE TABLE_NAME_HERE(' + CHAR(13) + CHAR(10) + CHAR(9) + STUFF(@CREATE_TABLE_QUERY, 1, 1, N'') + ');';

PRINT @CREATE_TABLE_QUERY;
注意:将“YOUR_PROCEDURE_NAME_HERE”替换为您自己的存储过程的名称

注意:用您选择的表名替换此处的表名

上述内容将产生如下结果:

CREATE TABLE TABLE_NAME_HERE(
     WeekName VARCHAR(40)
    , Line Name VARCHAR(50)
    , TheDate DATETIME
    , ReceivedAll INT
    , Answered INT
    , Abandoned INT
    , Call Length INT
    , WaitTimeAnswer INT
    , WaitTimeAbandon INT
    , PeriodName VARCHAR(10)
    , Week SMALLINT
    , Period SMALLINT
    , Year SMALLINT
    , WeekInPeriod SMALLINT
    , NumWeeksInPeriod SMALLINT
    , WeekendDate DATETIME
    , CRCOperative VARCHAR(100)
    , CallType VARCHAR(20)
    , Charge Time INT
    , SourceNumber VARCHAR(80)
    , DestinationNumber VARCHAR(80)
    , CallStart DATETIME
    , Out of Hours VARCHAR(12)
    , IsWorkingDay BIT
    );

首先,我将创建查询的存储过程。它使我以后不会忘记它

其次,我将编写一个查询来为我生成表:

DECLARE @CREATE_TABLE_QUERY NVARCHAR(MAX) = N'';


SELECT 
    @CREATE_TABLE_QUERY += ', ' + name + ' ' + UPPER(system_type_name) + CHAR(13) + CHAR(10) + CHAR(9)

FROM 
    sys.dm_exec_describe_first_result_set('YOUR_PROCEDURE_NAME_HERE', NULL, 1);


SELECT 
    @CREATE_TABLE_QUERY = N'CREATE TABLE TABLE_NAME_HERE(' + CHAR(13) + CHAR(10) + CHAR(9) + STUFF(@CREATE_TABLE_QUERY, 1, 1, N'') + ');';

PRINT @CREATE_TABLE_QUERY;
注意:将“YOUR_PROCEDURE_NAME_HERE”替换为您自己的存储过程的名称

注意:用您选择的表名替换此处的表名

上述内容将产生如下结果:

CREATE TABLE TABLE_NAME_HERE(
     WeekName VARCHAR(40)
    , Line Name VARCHAR(50)
    , TheDate DATETIME
    , ReceivedAll INT
    , Answered INT
    , Abandoned INT
    , Call Length INT
    , WaitTimeAnswer INT
    , WaitTimeAbandon INT
    , PeriodName VARCHAR(10)
    , Week SMALLINT
    , Period SMALLINT
    , Year SMALLINT
    , WeekInPeriod SMALLINT
    , NumWeeksInPeriod SMALLINT
    , WeekendDate DATETIME
    , CRCOperative VARCHAR(100)
    , CallType VARCHAR(20)
    , Charge Time INT
    , SourceNumber VARCHAR(80)
    , DestinationNumber VARCHAR(80)
    , CallStart DATETIME
    , Out of Hours VARCHAR(12)
    , IsWorkingDay BIT
    );

比临时表建议更好,因为SSMS无法编写脚本。比临时表建议更好,因为SSMS无法编写脚本。你也可以在2012年做一些事情。你也可以在2012年做一些事情