【问题标题】:Insert data from XML file into existing SQL Server table将 XML 文件中的数据插入现有 SQL Server 表
【发布时间】:2016-12-05 08:31:26
【问题描述】:

我需要将 XML 文件中的数据插入现有的 SQL SERVER 表中。我已将以下代码修改为 INSERT INTO 但它不起作用。我不想在这个语句中删除或创建新表

DECLARE @x xml
SELECT @x=P
FROM OPENROWSET (BULK 'D:\Course Instance Marketing Data From Drupal\instance_marketing.xml', SINGLE_BLOB ) AS COURSE_INSTANCE(P)

DECLARE @hdoc int

EXEC sp_xml_preparedocument @hdoc OUTPUT, @x


SELECT *
INTO RCMI_MARKETING_SYNC
FROM OPENXML(@hdoc,'/response/item', 2)
 WITH(
 CourseInstanceKey int '@key',
idRCMI_MARKETING_SYNC int '@key' ,
title varchar(3000),
course_code varchar(3000),
market_area varchar(3000),
ssa varchar(3000),
school_owning varchar(3000),
overview varchar(3000), 
entry_requirements varchar(3000),
teaching_methods varchar(3000),
modules_and_assessment varchar(3000),
career_options_progres varchar(3000),
equipment_needed_costs varchar(3000),
work_placement_field_trips varchar(3000)
)   

  EXEC sp_xml_removedocument @hdoc

错误

Msg 2714, Level 16, State 6, Line 10
There is already an object named 'RCMI_MARKETING_SYNC' in the database.

我不想删除现有表

【问题讨论】:

    标签: sql-server-2014 sqlxml


    【解决方案1】:

    首先:

    您使用FROM OPENXML 和相应的SP 来准备和删除文档的方法已经过时。你应该使用the appropriate XML methods

    如果您需要这方面的帮助,请使用您的 XML 的(简化的)示例开始一个新问题,并在此处放置一个链接。

    您的问题实际上与xml无关......

    您使用SELECT .. INTO tbl 的语句将物理地创建此表。如果这个表已经存在,你会得到一个错误。

    插入现有表的方式必须稍有不同:

    INSERT INTO RCMI_MARKETING_SYNC(col1, col2, col3,...) --place the actual column names here
    SELECT col1, col2, col3, ... FROM SomeWhere           --replace this by your XML-shredding query.
    

    【讨论】:

      【解决方案2】:

      找到答案

      DECLARE @x xml
      SELECT @x=P
      FROM OPENROWSET (BULK 'D:\Course Instance Marketing Data From Drupal\instance_marketing.xml', SINGLE_BLOB ) AS COURSE_INSTANCE(P)
      
      DECLARE @hdoc int
      
      EXEC sp_xml_preparedocument @hdoc OUTPUT, @x
      
      INSERT INTO RCMI_MARKETING_SYNC
      SELECT *
      FROM OPENXML(@hdoc,'/response/item', 2)
      WITH(
      CourseInstanceKey int '@key',
      idRCMI_MARKETING_SYNC int '@key' ,
      title varchar(3000),
      course_code varchar(3000),
      market_area varchar(3000),
      ssa varchar(3000),
      school_owning varchar(3000),
      overview varchar(3000), 
      entry_requirements varchar(3000),
      teaching_methods varchar(3000),
      modules_and_assessment varchar(3000),
      career_options_progres varchar(3000),
      equipment_needed_costs varchar(3000),
      work_placement_field_trips varchar(3000)
      )   
      
        EXEC sp_xml_removedocument @hdoc
      

      【讨论】:

      • 很高兴您自己找到了这个!两个提示:正如我的回答中所述,FROM OPENXML 的方法已经过时,其次:在没有列列表的情况下使用INSERT INTO TableName 可能非常危险。它有效,在这种情况下可能就足够了,但不建议这样做。
      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      相关资源
      最近更新 更多