尝试将 xml 数据作为元素(而非属性)传输到 SQL

Trying to transfer xml data into SQL as elements (not attribute)

我是新手,所以请多多包涵。我正在尝试将一些 XML 数据传输到 Microsoft SQL 服务器。我假设这些数据需要作为元素而不是属性来传输,因为列的内容不会是静态的。

但是由于某些原因,当我尝试将数据作为元素传输时,我得到了 NULL 值。但是,当我尝试将相同的数据作为属性传输时,它会正常工作并且看起来应该是这样。我很想耸耸肩继续前进,但我担心如果我以后再这样做的话,事情可能会对我不利。

我已经从这个 XML 中获得了一些属性,我设法将其作为属性进行传输,我计划将这些属性与这些伪装成属性的元素组合到一个 table 中。它会工作吗?如果这样做了,以后会不会有问题?

这是我尝试将元素作为元素传输时的 SQL 代码:

SELECT *
FROM OPENXML (@hdoc, '/roll/voter', 2)
WITH (
id int,
[value] char(50),
[state] char(2))

这是我尝试将元素作为属性传输时的 SQL 代码:

SELECT *
FROM OPENXML (@hdoc, '/roll/voter', 1)
WITH (
id int,
[value] char(50),
[state] char(2))

这里是 XML 文档的缩小版:

<roll>
<voter id="400048" value="Yea" state="FL" />
<voter id="412516" value="Yea" state="CA" />
</roll>

这是通过 google 驱动器(非常小 XML)到 xml 文档的 link:https://drive.google.com/open?id=0B5VgOwWcGeLHaWctRU56Qlk3UWM

A screenshot of my SQL query, the table results, and the XML

FROM OPENXML 已过时,不应再使用(存在极少数例外)...

尝试使用 真正的 XML 方法:

DECLARE @xml XML=
N'<roll>
<voter id="400048" value="Yea" state="FL" />
<voter id="412516" value="Yea" state="CA" />
</roll>';

SELECT @xml.value(N'(/roll/voter/@id)[1]',N'int') AS voter_id
      ,@xml.value(N'(/roll/voter/@value)[1]',N'nvarchar(max)') AS voter_value
      ,@xml.value(N'(/roll/voter/@state)[1]',N'nvarchar(max)') AS voter_state

结果

voter_id    voter_value voter_state
400048      Yea         FL