0

我已经写了下面提到的查询......

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name)  
                    from dbo.[WorkflowInstanceParameter] 
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')


Go 
set @query = 'SELECT ' + @cols + ' 
            from 
            (
                select wi.Id,wip.Name, wip.stringValue
                from FROM [ESP2_DEV1].[dbo].[WorkflowInstanceParameter] wip,
 [WorkflowParameterGroupInstance] wpgi, [ESP2_DEV1].[dbo].[WorkflowInstance] wi,
 dbo.WorkflowDefinition wd
 where wip.[WorkflowParameterGroupInstanceId] = wpgi.id
 and wpgi.[WorkflowInstanceId] =wi.id and
  wi.workflowDefinitionId=wd.id
            ) x
            pivot 
            (
                max(stringValue)
                for Name in (' + @cols + ')
            ) p '

execute(@query)

但它失败并出现错误“关键字'FOR'附近的语法不正确”

谁能帮帮我????

4

2 回答 2

4

这不是这篇文章的真正答案,但如果你用谷歌搜索这个错误,它是最热门的问题之一。

我遇到了这个问题,因为我试图用 @ 命名一个游标

declare @someName cursor for 

这不起作用。

你需要做:

declare someName cursor for 

反而。

我不清楚这是否总是如此,因为我在网上看到很多使用 @ 的例子和很多不使用的例子,这令人困惑。我是 sqlserver 的新手,所以不确定这里是否发生了一些微妙的事情。但是,这绝对解决了我的错误。这一点似乎在网上没有太多记录,但是这个其他问题记录了它,但由于某种原因在谷歌上更难找到!

强加名字的有趣事情!我正在将一个 oracle 模式转换为 sqlserver,并且必须将 @ 添加到任何地方的变量中,但显然不是这些变量!我猜那些做游标的人错过了那个会议什么的!

于 2014-04-01T12:18:11.980 回答
2

关键字 FROM 在 set @query 子句中重复:

select wi.Id,wip.Name, wip.stringValue
            from FROM [ESP2_DEV1].[dbo].[WorkflowInstanceParameter] wip
于 2013-05-10T08:19:47.357 回答