【问题标题】:Getting null value insert during bulk updates using open xml在使用 open xml 进行批量更新期间获取空值插入
【发布时间】:2013-02-05 19:08:53
【问题描述】:

我的数据库字段是

Id which is primary key and auto increment
imagename varchar(max)
imagepath varchar(max)
isdeleted bit

现在我正在使用 openxml 进行批量插入。它在 imagename 和 imagepath 列中插入空值。这是我的存储过程:

alter PROCEDURE PB_Insertgallery   
  @XmlString nText
AS
BEGIN    
    SET NOCOUNT ON;
DECLARE @XMLDocPointer INT  

    EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @XmlString     
   INSERT INTO tb_gallery
   (imagename, imagepath)    
   SELECT imagename,imagepath
   FROM OPENXML(@XMLDocPointer,'/NewDataSet/Table1',2)    
    WITH  (imagename VARCHAR(max),  --'@ImageName',     
         imagepath VARCHAR(max)     --'@ImagePath'
          )   
   EXEC sp_xml_removedocument @XMLDocPointer 
END
GO

而xml字符串是:

<NewDataSet>
     <Table1>
          <Imagename>Chrysanthemum.jpg</Imagename>
          <Imagepath>/prop_images/temp/Chrysanthemum.jpg</Imagepath>
     </Table1>
</NewDataSet>

请帮帮我;为什么我在插入过程中得到空值?

【问题讨论】:

    标签: asp.net sql-server sql-server-2008


    【解决方案1】:

    这是由于区分大小写,您的图像名称,SQL 中的图像路径是小写的,而它在 ntext 中有一些大写。

    alter PROCEDURE test   
      @XmlString nText,
      @Propertyid Varchar(100),
      @Builderid Varchar(100)
    AS
    BEGIN    
        SET NOCOUNT ON;
    DECLARE @XMLDocPointer INT  
    
        EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @XmlString     
       INSERT INTO tb_gallery
       (Imagename, Imagepath, Propertyid, Builderid)    
       SELECT Imagename,Imagepath, @Propertyid, @Builderid
       FROM OPENXML(@XMLDocPointer,'/NewDataSet/Table1',2)    
        WITH  (Imagename VARCHAR(max),  --'@ImageName',     
             Imagepath VARCHAR(max)     --'@ImagePath'
              )   
       EXEC sp_xml_removedocument @XMLDocPointer 
    END
    GO
    

    【讨论】:

    • 我对此进行了测试并确认了之前的空值和之后的成功输出。你的语法是正确的。
    • 我想再问一件事,假设..我的数据库中还有 2 个字段..它们是 @@Propertyid 和 @@BuilderId ..我正在传递另外两个参数是@@Propertyid 和@@BuilderId 一个s 参数,然后我也希望它与它一起插入.. 我该怎么做..?
    • 我不明白你的附加问题。您是说要向过程传递另外两个变量并且还想插入它们吗?它们被插入到哪里?同桌?
    • 我修改了答案以显示它。您只需将它们作为静态变量附加到结果集中。
    猜你喜欢
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2011-04-15
    • 2020-12-01
    相关资源
    最近更新 更多