2010-09-10 10 views
27

Hat jemand geschafft, ein CTE in SQL Server T-SQL zu erstellen, die auch eine WITH XMLNAMESPACES Deklaration enthält?Kombinieren CTE "WITH" und ein "WITH XMLNAMESPACES ...." in SQL Server

Es scheint, beide WITH Schlüsselwörter bestehen die "erste in der T-SQL-Batch" auf sein, und das funktioniert nicht wirklich ....

Ich habe versucht:

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

Didn‘ t Arbeit :-((Syntaxfehler)

Msg 156, Ebene 15, Status 1, Zeile 2
falsche Syntax nahe dem Schlüsselwort 'MIT'.
Msg 319, Ebene 15, Status 1, Zeile 2
Falsche Syntax in der Nähe des Schlüsselworts 'mit' . Wenn diese Anweisung ein allgemeiner Tabellenausdruck ist, eine xmlnamespaces-Klausel oder eine Änderungs- Tracking-Kontextklausel, muss die vorherige -Anweisung mit einem -Semikolon abgeschlossen werden.

Also versuchte ich die zweite WITH mit einem Semikolon vorangestellt wird:

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

und erhielt diese:

Msg 102, Ebene 15, Status 1, Zeile 2
falsche Syntax in der Nähe von ";"

und dann habe ich versucht, die WITH XMLNAMESPACES in den CTE setzen:

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

und erhielt diese:

Msg 156, Ebene 15, Status 1, Zeile 4
falsche Syntax in der Nähe von das Schlüsselwort 'MIT'.
Msg 319, Ebene 15, Status 1, Zeile 4
Falsche Syntax in der Nähe des Schlüsselwortes 'mit'. Wenn diese Anweisung ein allgemeiner Tabellenausdruck ist, eine xmlnamespaces-Klausel oder eine Änderungs- Tracking-Kontextklausel, muss die vorherige -Anweisung mit einem -Semikolon abgeschlossen werden.
Msg 102, Ebene 15, Status 1, Zeile 21
Falsche Syntax in der Nähe von ')'.

Also wie zum Teufel mache ich das ??

Antwort

42

Verwenden Sie ein Komma anstelle der zweiten WITH, z.

Das gleiche, wenn Sie mehrere CTE-Ausdrücke möchten. Sie müssen nur WITH einmal angeben, und dann verwenden alle anderen WITH Blöcke nur ein Komma anstelle des Schlüsselworts.

+2

Und 'XMLNAMESPACES' müssen zuerst definiert werden, bevor 'CTEs'. – Gabrielius