【发布时间】: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 INTO 和 CREATE 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 theAS` 并得到“关键字'SELECT'附近的语法不正确。” - @JNevill -
补充@Larnu 所说的,
EXEC不带括号将变量用作存储过程的名称。你可以使用EXEC(@query),但最好还是使用sp_executesql -
Create table as.. 不是 sql server 语法.. 我相信这是 MySql 和 Postgresql
标签: sql-server tsql dynamic-sql