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

如何在那里插入多行?

4

2 回答 2

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 回答
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

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

于 2012-05-10T15:00:10.187 回答