将XML导入SQL Server数据库

何时

将XML文件放入数据库时​​出现问题。

我的XML文件如下所示:

<teryt>
<catalog name="SIMC" type="all" date="2014-01-01">
<row>
<col name="WOJ">12</col>
<col name="POW">10</col>
<col name="GMI">16</col>
<col name="RODZ_GMI">5</col>
<col name="RM">00</col>
<col name="MZ">1</col>
<col name="NAZWA">Zagórze</col>
<col name="SYM">1047995</col>
<col name="SYMPOD">0465897</col>
<col name="STAN_NA">2014-01-01</col>
</row>
<row>
<col name="WOJ">14</col>
<col name="POW">36</col>
<col name="GMI">02</col>
<col name="RODZ_GMI">2</col>
<col name="RM">00</col>
<col name="MZ">1</col>
<col name="NAZWA">Wyspa</col>
<col name="SYM">1058763</col>
<col name="SYMPOD">0631864</col>
<col name="STAN_NA">2014-01-01</col>
</row>
</catalog>

每个标签包含10个标签,这些数据应放入列中。该标签是相同的,唯一不同的是名称属性(它是列的名称-该标签)。

我尝试将其放入具有以下名称的列的SQL表中:WOJ,POW,GMI,RODZ_GMI,RM,MZ,NAZWA,SYM,SYMPOD,STAN_NA。

这是我尝试使用2个游标。但是它以某种方式在第一行被阻止-这是我的预言,这是错误的。

DECLARE @DocID INT;
DECLARE @DocXML XML;
DECLARE @sqlstmt nVARCHAR(MAX);
DECLARE @results table (result xml)

--Build the Dynamic SQL Statement to get the data from the xml file
SET @sqlstmt= 'SELECT * FROM OPENROWSET ( BULK ''C:\SIMC.xml'', SINGLE_CLOB )AS xmlData'

-- Insert the results of the dynamic SQL Statement into the temporary table variable.
INSERT INTO @results EXEC (@sqlstmt)

--DECLARE @xmlDoc XML 
SELECT @DocXML = result FROM @results 
EXECUTE sp_xml_preparedocument @DocID OUTPUT, @DocXML;


Declare @WOJ integer, @POW integer, @GMI integer, 
@RODZ_GMI integer, @RM varchar(max), @MZ integer,
@NAZWA varchar(max), @SYM   varchar(max),@SYMPOD varchar(max),
@STAN_NA date
Declare @zmiennanacolumn xml
declare @rowid int
declare @dane varchar


set @rowid=1;
DECLARE kursorMain CURSOR LOCAL FORWARD_ONLY FOR

SELECT 
*
from OPENXML(@DocID, 'teryt/catalog/row', 2)

Open KursorMain
fetch next from KursorMain into @rowid,@zmiennanacolumn

 WHILE @@FETCH_STATUS = 0

  BEGIN

  --tutaj robić coś z tymi danymi które mam
  DECLARE @h2 int
  EXEC sp_xml_preparedocument @h2 output, @zmiennanacolumn

  DECLARE kursorMainInside CURSOR LOCAL FORWARD_ONLY FOR

  select [col]
from OPENXML(@h2,'',2) with [col] varchar

Open kursorMainInside
  declare @columnnumber int
  set @columnnumber=1

FETCH NEXT FROM KursorMainInside into @dane

 WHILE @@FETCH_STATUS = 0

  BEGIN
if(@columnnumber=1) set @WOJ = @dane
else if(@columnnumber=2) set @POW = @dane
else if(@columnnumber=3) set @GMI = @dane
else if(@columnnumber=4) set @RODZ_GMI = @dane
else if(@columnnumber=5) set @RM = @dane
else if(@columnnumber=6) set @MZ = @dane
else if(@columnnumber=7) set @NAZWA = @dane
else if(@columnnumber=8) set @SYM = @dane
else if(@columnnumber=9) set @SYMPOD = @dane
else set @STAN_NA = @dane
--tutaj patrzeć które przejście i dodawać do inta

set @columnnumber = @columnnumber +1

FETCH NEXT FROM KursorMainInside into @dane


Insert into [dbo.SIMC] values (@rowid, @WOJ , @POW , @GMI , 
@RODZ_GMI , @RM , @MZ ,
@NAZWA , @SYM   ,@SYMPOD ,
@STAN_NA)

END
EXEC sp_xml_removedocument @h2
  CLOSE KursorMainInside
  DEALLOCATE KursorMainInside

 set @rowid=@rowid+1

FETCH NEXT FROM KursorMain  into @rowid,@zmiennanacolumn

END
EXEC sp_xml_removedocument @DocID
  CLOSE KursorMain
  DEALLOCATE KursorMain
marc_s

假设您在SQL Server变量中具有有效的XML @Input,则可以使用如下代码:

INSERT INTO dbo.YourTableName(WOJ, POW, GMI, RODZ_GMI, RM, MZ, NAZWA, SYM, SYMPOD, STAN_NA)
    SELECT
       WOJ = xc.value('(col[@name="WOJ"])[1]', 'varchar(50)'),
       POW = xc.value('(col[@name="POW"])[1]', 'varchar(50)'),
       GMI = xc.value('(col[@name="GMI"])[1]', 'varchar(50)'),
       RODZ_GMI = xc.value('(col[@name="RODZ_GMI"])[1]', 'varchar(50)'),
       RM =xc.value('(col[@name="RM"])[1]', 'varchar(50)'),
       MZ =xc.value('(col[@name="MZ"])[1]', 'varchar(50)'),
       NAZWA =xc.value('(col[@name="NAZWA"])[1]', 'varchar(50)'),
       SYM =xc.value('(col[@name="SYM"])[1]', 'varchar(50)'),
       SYMPOD =xc.value('(col[@name="SYMPOD"])[1]', 'varchar(50)'),
       TAN_NA =xc.value('(col[@name="STAN_NA"])[1]', 'varchar(50)')
    FROM
       @input.nodes('/teryt/catalog/row') AS XT(XC)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

选择SQL Server数据库大小

来自分类Dev

从Powershell删除SQL Server数据库

来自分类Dev

SQL Server数据库连接错误

来自分类Dev

数据库中的SQL Server对象

来自分类Dev

在Azure中导入SQL Server 2008数据库

来自分类Dev

SQL Server数据库连接问题

来自分类Dev

SQL Server 2005数据库比较

来自分类Dev

从DataTable插入Sql Server数据库

来自分类Dev

如何将数据插入SQL Server数据库

来自分类Dev

将数据从SQL Server 2008导入mongoDB数据库(批处理脚本尝试失败)

来自分类Dev

SQL Server:大块数据库查询

来自分类Dev

将XML文件读入SQL Server数据库

来自分类Dev

多个SQL Server数据库访问

来自分类Dev

同步SQL Server数据库

来自分类Dev

连接到SQL Server数据库

来自分类Dev

使用R从SQL Server数据库导入并显示jpeg

来自分类Dev

在Azure中导入SQL Server 2008数据库

来自分类Dev

将XML导入Sql数据库

来自分类Dev

将XML导入MySQL数据库

来自分类Dev

将XML导入SQL Server

来自分类Dev

如何将数据插入SQL Server数据库

来自分类Dev

将.csv文件导入SQL Server 2014数据库

来自分类Dev

将XML文件读入SQL Server数据库

来自分类Dev

将数据从SQL Server数据库导入HTML表

来自分类Dev

将数据库 mdb 导入 Sql Server 时出错

来自分类Dev

将 XML 转换为 SQL Server 数据库

来自分类Dev

SQL Server 导入向导,Access 数据库引擎

来自分类Dev

将 XML 文件插入 SQL Server 中的数据库

来自分类Dev

SQL server 的数据库是 sql 数据库吗?