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

これは実際にはこの投稿に対する回答ではありませんが、このエラーをグーグルで検索すると、トップヒットの 1 つになります。

@でカーソルに名前を付けようとしていたため、この問題に遭遇していました

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 に答える