尝试将 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
我是新手,所以请多多包涵。我正在尝试将一些 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