J'essaie de faire une vue. Jusqu'à présent, j'ai écrit ceci:
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;
Malheureusement, je reçois une erreur sur la ligne contenant CREATE VIEW showing
"CREATE VIEW doit être la seule instruction du lot"
Comment puis-je réparer cela?!
Comme le dit l'erreur, l'instruction CREATE VIEW
doit être la seule instruction du lot de requêtes.
Vous avez deux options dans ce scénario, en fonction de la fonctionnalité que vous souhaitez obtenir:
Placez la requête CREATE VIEW
au début
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
)
Utilisez GO
après le CTE et avant la requête CREATE VIEW
-- 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;
Je suis tombé sur cette question lorsque j'essayais de créer deux vues dans la même déclaration. Ce qui a bien fonctionné pour moi, c'est l'utilisation de SQL dynamique.
EXEC('CREATE VIEW V1 as SELECT * FROM [T1];');
EXEC('CREATE VIEW V2 as SELECT * FROM [T2];');