40

これが可能かどうか疑問に思っていました。WITH次のように、句を使用していくつかの集計データをクエリに適用する既存のクエリがありSELECTます:(大幅に簡略化)

;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
SELECT y, z FROM alias

INSERTこのクエリの結果を別のテーブルに入れたいと思います。

私は次のことを試しました:

INSERT INTO tablea(a,b)
;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
SELECT y, z FROM alias

しかし、私はエラーが発生します:

「;」付近の構文が正しくありません。

だから私はセミコロンなしで試してみましたが、エラーが発生しました:

キーワード「WITH」付近の構文が正しくありません。

キーワード「with」付近の構文が正しくありません。このステートメントが共通テーブル式または xmlnamespaces 節である場合、前のステートメントはセミコロンで終了する必要があります。

私がやろうとしていることは、いくつかの異なる構文で可能ですか?

4

3 に答える 3

77

INSERT INTOの後に右を配置する必要がありますCTE。したがって、コードは次のようになります。

;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
INSERT INTO tablea(a,b)
SELECT y, z 
FROM alias

デモで SQL Fiddle を参照してください

于 2013-03-22T15:38:48.863 に答える
1

aを使用しない別の方法CTEは、サブクエリでラップすることです。

INSERT INTO tablea(a,b)
SELECT y, z 
FROM 
(
    SELECT y,z FROM tableb
) alias
于 2013-03-22T15:41:55.090 に答える