将 XML 文件中的数据插入现有 SQL 服务器 table

Insert data from XML file into existing SQL Server table

我需要将 XML 文件中的数据插入现有的 SQL 服务器 table。我已将以下代码修改为 INSERT INTO 但它不起作用。我不想在此语句

中删除或创建新的table
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.

我不想删除现有的 table

首先:

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

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

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

您对 SELECT .. INTO tbl 的声明将在物理上创建此 table。如果这个 table 已经存在,你会得到一个错误。

插入现有的 table 必须略有不同:

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.

找到答案

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