1

xml ファイルにないすべての行をテーブルに挿入しようとしています。複数の行がある場合、次のエラーが表示されます。これは私が使用しているクエリです:

insert into #tmpPievVNC
    select
        a.id, 'J'
    from
        openxml(@hDoc, '/art_kompl/nol_voav') with #vc xd 
        join nol_art a on xd.id_art = a.id
    where
            not exists(select * from nol_voav nv 
        where
            (id_art=xd.id_art) and (begDate=xd.begDate) and (endDate=xd.endDate))

そこに複数の行を挿入するにはどうすればよいですか?

4

2 に答える 2

0

結合を使用して sql ステートメントを変更し、xml ファイルで使用できないレコードを取得できます。

次のSQLステートメントは、xmlファイルにないnol_voavテーブルからすべての行を返し、それらを#tmpPievVNCテーブルに挿入しています。

insert into #tmpPievVNC
    select
        nv.id, 'J'
    from
        openxml(@hDoc, '/art_kompl/nol_voav') with #vc xd 
        inner join nol_art a on xd.id_art = a.id
    right join nol_voav nv on 
            nv.id_art=xd.id_art and nv.begDate=xd.begDate and nvendDate=xd.endDate
    where xd.id_art is null

"inner join nol_art a on xd.id_art = a.id"nol_art テーブルと結合したくない場合は、ステートメントをスキップできます。

于 2012-05-10T15:00:10.187 に答える
0

LEFT JOIN を使用するようにクエリを変換してみることができます。

insert into #tmpPievVNC
    select
        a.id, 'J'
    from
        openxml(@hDoc, '/art_kompl/nol_voav') with #vc xd 
        join nol_art a on xd.id_art = a.id LEFT JOIN nol_voav nv 
        on xd.id_art = nv.id_art   and xd.begDate = nv.begDate and 
        xd.endDate = nv.endDate
     WHERE nv.id_art IS NULL

これはサブクエリのエラーを説明するものではありませんが、作業しているテーブル/データが表示されていなくても、必要なものが得られるはずです

于 2012-05-10T15:10:55.067 に答える