1. ホーム
  2. sql

[解決済み】CREATE VIEW は、バッチ内の唯一のステートメントでなければなりません。

2022-01-22 20:35:20

質問

ビューを作ろうとしています。 今のところ、こんな感じで書いています。

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;

残念ながら、次の行でエラーが発生します。 CREATE VIEW showing

CREATE VIEWはバッチ内の唯一のステートメントでなければなりません。

どうやったら直るんだ!?

解決方法は?

エラーにあるように CREATE VIEW ステートメントは、クエリバッチ内の唯一のステートメントである必要があります。

このシナリオでは、実現したい機能に応じて、2つのオプションがあります。

  1. を配置します。 CREATE VIEW クエリの先頭に

    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
        )
    
    
  2. 使用方法 GO の後、CTE の前に CREATE VIEW クエリ

    -- オプション #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;