40

WITH XMLNAMESPACESSQL ServerのT-SQLで、宣言も含むCTEを作成できた人はいますか?

どちらのWITHキーワードも「T-SQLバッチの最初」であることを主張しているようですが、それは実際には機能しません。

私は試した:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
WITH CTEQuery AS
(
SELECT (list of fields)
    FROM dbo.MyTable
    WHERE (conditions)
)
SELECT * FROM CTEQuery

動作しませんでした:-((構文エラー)

メッセージ156、レベル15、状態1、行2
キーワード「WITH」の近くの構文が正しくありません。
メッセージ319、レベル15、状態1、行2
キーワード「with」の近くの構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces節、または変更追跡コンテキスト節である場合、前のステートメントはセミコロンで終了する必要があります。

そこで、2番目WITHにセミコロンを付けてみました。

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
;WITH CTEQuery AS
(
SELECT (list of fields)
    FROM dbo.MyTable
    WHERE (conditions)
)
SELECT * FROM CTEQuery

そしてこれを手に入れました:

メッセージ102、レベル15、状態1、行2
';'の近くの構文が正しくありません。

それから私WITH XMLNAMESPACESはCTEに入れてみました:

WITH CTEQuery AS
(
   WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
   SELECT (list of fields)
      FROM dbo.MyTable
      WHERE (conditions)
)
SELECT * FROM CTEQuery

そしてこれを手に入れました:

メッセージ156、レベル15、状態1、行4
キーワード「WITH」の近くの構文が正しくありません。
メッセージ319、レベル15、状態1、行4
キーワード「with」の近くの構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces節、または変更追跡コンテキスト節である場合、前のステートメントはセミコロンで終了する必要があります。
メッセージ102、レベル15、状態1、行21
')'の近くの構文が正しくありません。

それで、私はこれをどのように行うのですか?

4

1 に答える 1

60

2番目の代わりにコンマを使用しますWITH。例:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
,CTEQuery AS
(
SELECT (list of fields)
    FROM dbo.MyTable
    WHERE (conditions)
)
SELECT * FROM CTEQuery

複数のCTE式が必要な場合も同じです。指定する必要があるのはWITH1回だけで、他のすべてのWITHブロックではキーワードの代わりにコンマを使用するだけです。

于 2010-09-10T14:09:31.690 に答える