2012-05-10 79 views
1

我想插入到表中所有這些行不在xml文件中。當存在多於一行時,它會顯示錯誤:「子查詢返回的值超過1個,當子查詢遵循=,!=,=或子查詢用作表達式時,這是不允許的。這是查詢我使用的是什麼:上插入:子查詢返回多個值

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)) 

如何插入多行呢?

+0

你試過在你的子查詢中使用'SELECT TOP 1 * FROM nol_voav nv'嗎? – gcochard

+0

@Greg嘗試過,但它給了我同樣的錯誤 – Brezhnews

+0

存在不能在這裏,因爲它是真的或假的罪魁禍首。 nol_art是一個視圖嗎?也許你的子查詢在那裏... –

回答

0

可以使用修改SQL語句連接來獲得在XML文件中沒有提供的記錄..

下面的SQL語句返回所有從nol_voav表,該表是不是在XML文件中的行,然後在插入#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 

如果您不想加入nol_art表,您可以跳過"inner join nol_art a on xd.id_art = a.id"語句。

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 

這並不能解釋子查詢的錯誤,但沒有看到/數據您正在使用的表,它應該讓你什麼你需要