Ich versuche, eine Ansicht zu machen. Bisher habe ich folgendes geschrieben:
with ExpAndCheapMedicine(MostMoney, MinMoney) as
(
select max(unitprice), min(unitprice)
from Medicine
)
,
findmostexpensive(nameOfExpensive) as
(
select tradename
from Medicine, ExpAndCheapMedicine
where UnitPrice = MostMoney
)
,
findCheapest(nameOfCheapest) as
(
select tradename
from Medicine, ExpAndCheapMedicine
where UnitPrice = MinMoney
)
CREATE VIEW showing
as
select tradename, unitprice, GenericFlag
from Medicine;
Leider erhalte ich eine Fehlermeldung in der Zeile, die CREATE VIEW showing
enthält.
"CREATE VIEW muss die einzige Anweisung im Stapel sein"
Wie kann ich das beheben ?!
Genau wie der Fehler besagt, muss die CREATE VIEW
-Anweisung die einzige Anweisung im Abfragebatch sein.
In diesem Szenario haben Sie zwei Optionen, abhängig von der gewünschten Funktionalität:
Platzieren Sie die CREATE VIEW
-Abfrage am Anfang
CREATE VIEW showing
as
select tradename, unitprice, GenericFlag
from Medicine;
with ExpAndCheapMedicine(MostMoney, MinMoney) as
(
select max(unitprice), min(unitprice)
from Medicine
)
,
findmostexpensive(nameOfExpensive) as
(
select tradename
from Medicine, ExpAndCheapMedicine
where UnitPrice = MostMoney
)
,
findCheapest(nameOfCheapest) as
(
select tradename
from Medicine, ExpAndCheapMedicine
where UnitPrice = MinMoney
)
Verwenden Sie GO
nach dem CTE und vor der CREATE VIEW
-Abfrage
-- Option 2
with ExpAndCheapMedicine(MostMoney, MinMoney) as
(
select max(unitprice), min(unitprice)
from Medicine
)
,
findmostexpensive(nameOfExpensive) as
(
select tradename
from Medicine, ExpAndCheapMedicine
where UnitPrice = MostMoney
)
,
findCheapest(nameOfCheapest) as
(
select tradename
from Medicine, ExpAndCheapMedicine
where UnitPrice = MinMoney
)
GO
CREATE VIEW showing
as
select tradename, unitprice, GenericFlag
from Medicine;
Ich bin auf diese Frage gestoßen, als ich versuchte, ein paar Ansichten innerhalb derselben Anweisung zu erstellen. Was für mich gut funktioniert hat, ist dynamisches SQL.
EXEC('CREATE VIEW V1 as SELECT * FROM [T1];');
EXEC('CREATE VIEW V2 as SELECT * FROM [T2];');