消息 102,级别 15,状态 1,第 33 行“)”附近的语法不正确

Msg 102, Level 15, State 1, Line 33 Incorrect syntax near ')'

我第一次尝试将动态查询作为数据透视表 table。我使用 SO 解决了很多错误。现在我陷入了以下常见错误

Msg 102, Level 15, State 1, Line 33 Incorrect syntax near ')'.

所以我无法发现错误是什么..!

pivotEx

create table pivotEx (name varchar(1), mark int, subject varchar(1))

insert into pivotEx values
 ('a', 70,'t')
,('a', 80,'e')
,('b', 60,'t')
,('c', 80,'t')
,('c', 90,'e')
,('c', 40,'m')

静态查询(工作正常)

 select name, [e],[m],[t] from(  
  select name, mark, subject from pivotEx 
 ) f
 pivot
 ( sum(mark) for subject in ([e],[m],[t])
 ) p

动态查询(我正在尝试)

declare @col varchar(max)
declare @sql nvarchar(100)
set @col = N''
select @col +=  ',' + col from (select distinct quotename(subject) col from pivotex) colp
select @col=SUBSTRING(@col,2,len(@col))
select  @col
set @sql = 
N'select name, '+@col+' from(  
 select name, mark, subject from pivotEx 
) f
pivot
( sum(mark) for subject in ('+@col+')
) p'

EXEC sp_executesql @sql

注:

  1. 使用 SQL Server 2014。
  2. 使用 SSMS 2012。
  3. 我是动态查询的新手。

谢谢,

泰米尔普加尔

您需要更改 @sql 数据类型,因为您的查询字符串被截断了:

declare @sql nvarchar(MAX)

DBFiddle Demo


在执行之前用 SELECT/PRINT 打印查询是一个好习惯。

PRINT @sql
-- select name, [e],[m],[t] 
   from(select name, mark, subject from pivotEx ) f pivot( sum(mark) for subje