代码之家  ›  专栏  ›  技术社区  ›  Dinesh

如何在将数据插入数据库时跳过无效行

  •  0
  • Dinesh  · 技术社区  · 14 年前

    我们有一个语句,即在一个临时表中插入一些行(例如,10行),当插入第5行时,它与列格式之一有一些问题,并给出了一个错误,然后它停止插入行。 我想要的是,它应该跳过错误行并插入有效行。 对于这些错误行,它可以跳过该错误列,并使用一些空值和不同的状态插入。

    create table #tb_pagecontent_value (pageid int,formid uniqueidentifier, id_field xml,fieldvalue xml,label_final xml)
    …
    …
    
    insert into #tb_pagecontent_xml
          select A.pageid,B.formid,A.PageData.query('/CPageDataXML/control') 
          from Pagedata A inner join page B on A.PageId=B.PageId
          inner join FormAssociation C on B.FormId=C.FormId
          where B.pageid in (select pageId from jobs where jobtype='zba' and StatusFlag!=1)
    

    在上面的例子中,我想应用这个逻辑。 感谢您的帮助。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Thomas    14 年前

    关系数据库不逐行工作,而是按集合工作。因此,每个insert语句都是一个封装操作:要么整个操作有效,要么整个insert回滚。也就是说,一些数据库系统,特别是MS Access,将允许忽略未通过验证的行。但是,在后台,Access一次插入一行,而不是作为一组插入。大多数DBMS接口都不会这样做,包括SQL Server。如果希望跳过未通过验证的行,则需要将它们从插入中筛选出来。