【问题标题】:How to create a new table with the select query results如何使用选择查询结果创建新表
【发布时间】:2017-02-20 21:19:29
【问题描述】:

我想将获得的查询(下面公开,见:代码)转换成一个新表,这样我就可以更轻松地计算和处理数据..

我知道这个问题听起来很愚蠢,但是当我使用时:

  SELECT X.*

  INTO NewTable

 FROM

 (

         SELECT .... complex query ....

         FROM ...

          ...

  ) AS X

它向我发送了一条错误消息,我应该如何将我的查询输入到上述代码中..

错误:

消息 156,级别 15,状态 1,第 10 行

关键字“select”附近的语法不正确。

消息 156,级别 15,状态 1,第 54 行

关键字“from”附近的语法不正确。

代码:

  SELECT *

  INTO Price_to_book_valid

  FROM

  (

    select *

    from pricetobook

    declare @sql nvarchar(max);
    declare @fields nvarchar(max);

    set @fields=stuff((select ',['+column0+']'
           from dll_ptbv
           where column0 not in ('Code','Mnemonic')
           group by column0
           order by case when column0='Name' then 0 else 3 end
           ,column0
           for xml path('')
          ,type
           ).value('.','nvarchar(max)')
           ,1 ,1 ,'');
  set@sql='select'+@fields 
     + 'from (select column0
                    ,column1
                    ,sum(rn1*rn2) over(order by rn2) as rn
             from (select column0
                         ,column1
                         ,case when column0=''Name'' then 1 else 0 end as rn1
                         ,row_number() over(order by (select null)) as rn2
                 from dll_ptbv
                 ) as a
            ) as a
 pivot (max(column1) for column0 in ('+@fields+')) as p
 order by [Name]';
  execute sp_executesql @sql;

【问题讨论】:

  • “它给我发了一条错误信息”,为什么不分享错误信息呢?
  • 完成!我真的虽然是这样,对不起
  • 您正在混合使用静态 sql 和动态 sql。它不能像这样工作。您必须将动态 sql 的结果执行到表(常规、临时或变量)中,并将该表与静态 sql 一起使用。
  • 我如何将我的结果插入到常规、临时或变量表中?感谢您的帮助
  • 阅读insert... exec

标签: sql sql-server tsql


【解决方案1】:

您可以在列名称之前使用 select INTO

SELECT * INTO NewTable 
FROM
(
     SELECT .... complex query .... 
     FROM ...
      ...
) p   <<<<<<<< remove as

(你应该像 a 一样删除)拳头你应该分配一个表名,最后你可以使用一个别名

【讨论】:

  • Msg 156, Level 15, State 1, Line 1 关键字“INTO”附近的语法不正确。消息 156,级别 15,状态 1,第 9 行关键字“声明”附近的语法不正确。消息 102,级别 15,状态 1,第 51 行 ')' 附近的语法不正确。
  • 更新您的问题并显示您正在使用的确切代码
  • 完成(我删除了“AS X”)并且知道我刚刚得到:Msg 156, Level 15, State 1, Line 12 关键字'declare'附近的语法不正确。
  • 我是否将它放在查询这部分的末尾 " ) a" ? bc 它使用关键字 declare 不断发送错误
  • 可能是 p (不是 a )您的动态选择生成表的最后一种形式
【解决方案2】:

-- 14. 从动态存储过程执行中选择新表。


-- 临时表的动态存储过程

         USE tempdb; 
           GO 
             -- SQL create dynamic stored procedure

             CREATE PROCEDURE DynamicSprocToTempTable 
                AS 
                  BEGIN 
             DECLARE  @SQL NVARCHAR(MAX)
            SET @SQL = 'SELECT top (5) * from AdventureWorks.Purchasing.PurchaseOrderHeader 
            ORDER BY NEWID()' 
         -- Dynamic SQL
             EXEC Sp_executesql    @SQL 
               END 
             GO 

          -- Test stored procedure
       EXEC tempdb.dbo.DynamicSprocToTempTable 
            GO 
        -- Select into temporary table from OPENQUERY
        -- SQL select into temp table 
         SELECT * INTO   #poh 
                FROM   Openquery(SERVERALPHA,'exec tempdb.dbo.DynamicSprocToTempTable') 
         GO 

             SELECT PurchaseOrderID, VendorID, OrderDate 
                FROM   #poh 

/* 结果

PurchaseOrderID VendorID OrderDate

2662 50 2004-05-19 00:00:00.000

2454 44 2004-05-01 00:00:00.000

2547 96 2004-05-10 00:00:00.000

901 54 2003-10-13 00:00:00.000

2675 74 2004-05-22 00:00:00.000

*/

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2011-04-15
    • 2016-07-03
    • 2012-06-22
    相关资源
    最近更新 更多