誰かがSQL ServerのT-SQLでWITH XMLNAMESPACES
宣言も含む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
「)」付近の構文が正しくありません。
一体どうやってこれを行うのですか?
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式が必要な場合も同じです。 WITH
を指定する必要があるのは1回だけで、他のすべてのWITH
ブロックはキーワードの代わりにカンマを使用するだけです。