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

Abh*_*786 2 sql t-sql sql-server

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

    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)
Run Code Online (Sandbox Code Playgroud)

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

谁能帮我这个吗????

Jon*_*Raa 6

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

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

declare @someName cursor for 
Run Code Online (Sandbox Code Playgroud)

这不起作用。

你需要做:

declare someName cursor for 
Run Code Online (Sandbox Code Playgroud)

反而。

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

有趣的是强行命名!我正在将 Oracle 模式转换为 sqlserver,并且必须将 @ 添加到各处的变量,但显然不是这些变量!我猜那些做光标的人错过了那个会议或者其他什么!