Transact SQL mit WITH in CREATE VIEW

13

Ich möchte VIEW mit WITH-Klauseln erstellen, kann jedoch keine Referenzen zur korrekten Syntax finden.

Ich will so etwas

WITH TempTbl AS (SELECT ...)
CREATE VIEW SomeView
SELECT *
FROM TempTbl

Und was ist die richtige Syntax für die Verwendung mehrerer WITH-Klauseln?

Nichts Nützliches bei MSDN :(

bazzilic
quelle

Antworten:

24

Der CTE geht in die Ansicht hinein.

Nehmen Sie eine Abfrage mit einem CTE

WITH cte AS (...) SELECT ...;

Fügen Sie einfach CREATE VIEW AS .. GO hinzu

CREATE VIEW
AS
WITH cte AS (...) SELECT ...;
GO

MSDN beschreibt mehrere CTEs (siehe Beispiel j)

CREATE VIEW
AS
WITH
   cte1 AS (...),
   cte2 AS (...),
   cte3 AS (...)
SELECT ...
GO
gbn
quelle
Der Trick für mich war, einige zusätzliche Klammern zu entfernen. create view myView as ( select ... )funktioniert und create view myView as with tempTbl as select ...funktioniert, create view myView as ( with tempTbl as select ... )ist aber ein Syntaxfehler. `
Molomby
6
CREATE VIEW 
someview
AS
WITH CTEstuff AS (SELECT etc)
SELECT * FROM CTESTuff;
Scott Herbert
quelle
willkommen bei dba.se und danke für den beitrag. Nur damit Sie wissen, ist die Frage hier wirklich zu grundlegend für die Site und wird wahrscheinlich geschlossen - aber das spiegelt Ihre Antwort nicht wider :) Angesichts Ihrer Kenntnisse von SQL Server und Postgres gibt es bis jetzt noch viele weitere Fragen zum Thema deine Straße, also hoffe ich, du bleibst hier.
Jack Douglas
Übrigens ist postgres fantastisch! Ich bin sicher, Sie stimmen zu :)
Jack Douglas
1
Schön hier zu sein. Ich denke, es wäre eine Schande, eine Frage als zu grundlegend zu betrachten. Obwohl ich damit einverstanden bin, dass es sich möglicherweise nicht um eine Verwaltungsfrage handelt und in ein anderes Forum gehört, kann es sein, dass der Stapel selbst ausgetauscht wird. Trotzdem danke!
Scott Herbert
Ich denke, Sie haben Recht, SO ist wahrscheinlich das Beste, aber wir versuchen, ein bisschen flexibel zu sein, insbesondere, wenn die Leute bereits Anstrengungen unternommen haben, um zu antworten, bis wir es bemerken :)
Jack Douglas