【问题标题】:How do I create a new table from the results of a dynamic SQL statement in T-SQL如何从 T-SQL 中的动态 SQL 语句的结果创建新表
【发布时间】:2021-10-31 00:48:31
【问题描述】:

我正在尝试使用此动态 SQL 语句的结果来创建一个新表

DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX);

SET @cols = STUFF((SELECT DISTINCT
                       ',' + QUOTENAME(c.[ClassCode])
                   FROM [Sandbox].[dbo].Test2 c 
                   FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '');

SET @query = 'SELECT [Name_ID], ' + @cols + 
             'FROM (SELECT [Name_ID],
                           [ClassCodeYN] AS [amount],
                           [ClassCode] AS [category]
                    FROM [Sandbox].[dbo].[Test2]) x 
              PIVOT (COUNT(amount) FOR category IN (' + @cols + ')) p';

EXECUTE @query

我尝试使用 INSERT INTOCREATE TABLE 并得到任一

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

必须声明@query

错误。

【问题讨论】:

  • 你应该可以在 SELECT 前面加上一个CREATE TABLE AS <new_table_name> AS,比如@query = 'CREATE TABLE AS <your_new_table> AS SELECT [Name_ID], ...
  • EXECUTE @query 应该是EXEC sys.sp_executesql @query;
  • 您好,感谢您的回复。我试过@query = 'CREATE TABLE AS <your_new_table> AS SELECT [Name_ID], ...``` as well as removing the AS` 并得到“关键字'SELECT'附近的语法不正确。” - @JNevill
  • 补充@Larnu 所说的,EXEC 不带括号将变量用作存储过程的名称。你可以使用EXEC(@query),但最好还是使用sp_executesql
  • Create table as .. 不是 sql server 语法.. 我相信这是 MySql 和 Postgresql

标签: sql-server tsql dynamic-sql


【解决方案1】:

您应该能够将into <table> 添加到您现有的查询中:

DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX);

SET @cols = STUFF((SELECT DISTINCT
                       ',' + QUOTENAME(c.[ClassCode])
                   FROM [Sandbox].[dbo].Test2 c 
                   FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '');

SET @query = 'SELECT [Name_ID], ' + @cols + 
             ' INTO MyTable' +
             ' FROM (SELECT [Name_ID],
                           [ClassCodeYN] AS [amount],
                           [ClassCode] AS [category]
                    FROM [Sandbox].[dbo].[Test2]) x 
              PIVOT (COUNT(amount) FOR category IN (' + @cols + ')) p';

Exec sp_executesql @query

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 2011-07-02
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多