【问题标题】:Msg 102, Level 15, State 1, Line 33 Incorrect syntax near ')'消息 102,级别 15,状态 1,第 33 行 ')' 附近的语法不正确
【发布时间】:2018-07-04 08:54:54
【问题描述】:

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

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

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

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. 我是 Dynamic Query 的新手。

谢谢,

泰米尔语

【问题讨论】:

    标签: dynamic sql-server-2014 ssms-2012


    【解决方案1】:

    您需要更改@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
    

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多