如何使用 SQL 服务器从 table 的 xml 列中提取值
How to extract values from xml column in a table using SQL Server
我正在尝试从 SQL 服务器的 table 中的 XML 列中提取值。我有这个 table InsuranceEntity
列 InsuranceEntity_ID
和 EntityXML
.
EntityXML
列的值如下:
<insurance insurancepartnerid="CIGNA" sequencenumber="1"
subscriberidnumber="1234567" groupname="Orthonet-CIGNA"
groupnumber="7654321" copaydollaramount="1" />
如何从此 EntityXML
列中提取 subscriberidnumber
和 groupnumber
?
XQuery 方法 .nodes()
和 .value()
来拯救。
您可能需要调整数据类型。我全面使用了通用 VARCHAR(20)
。
SQL
--DDL and sample data population, start
DECLARE @tbl TABLE (InsuranceEntity_ID INT IDENTITY PRIMARY KEY, EntityXML XML);
INSERT INTO @tbl (EntityXML) VALUES
(N'<insurance insurancepartnerid="CIGNA" sequencenumber="1"
subscriberidnumber="1234567" groupname="Orthonet-CIGNA"
groupnumber="7654321" copaydollaramount="1"/>');
--DDL and sample data population, end
SELECT InsuranceEntity_ID
, c.value('@subscriberidnumber', 'VARCHAR(20)') AS subscriberidnumber
, c.value('@groupnumber', 'VARCHAR(20)') AS groupnumber
FROM @tbl
CROSS APPLY EntityXML.nodes('/insurance') AS t(c);
输出
+--------------------+--------------------+-------------+
| InsuranceEntity_ID | subscriberidnumber | groupnumber |
+--------------------+--------------------+-------------+
| 1 | 1234567 | 7654321 |
+--------------------+--------------------+-------------+
我正在尝试从 SQL 服务器的 table 中的 XML 列中提取值。我有这个 table InsuranceEntity
列 InsuranceEntity_ID
和 EntityXML
.
EntityXML
列的值如下:
<insurance insurancepartnerid="CIGNA" sequencenumber="1"
subscriberidnumber="1234567" groupname="Orthonet-CIGNA"
groupnumber="7654321" copaydollaramount="1" />
如何从此 EntityXML
列中提取 subscriberidnumber
和 groupnumber
?
XQuery 方法 .nodes()
和 .value()
来拯救。
您可能需要调整数据类型。我全面使用了通用 VARCHAR(20)
。
SQL
--DDL and sample data population, start
DECLARE @tbl TABLE (InsuranceEntity_ID INT IDENTITY PRIMARY KEY, EntityXML XML);
INSERT INTO @tbl (EntityXML) VALUES
(N'<insurance insurancepartnerid="CIGNA" sequencenumber="1"
subscriberidnumber="1234567" groupname="Orthonet-CIGNA"
groupnumber="7654321" copaydollaramount="1"/>');
--DDL and sample data population, end
SELECT InsuranceEntity_ID
, c.value('@subscriberidnumber', 'VARCHAR(20)') AS subscriberidnumber
, c.value('@groupnumber', 'VARCHAR(20)') AS groupnumber
FROM @tbl
CROSS APPLY EntityXML.nodes('/insurance') AS t(c);
输出
+--------------------+--------------------+-------------+
| InsuranceEntity_ID | subscriberidnumber | groupnumber |
+--------------------+--------------------+-------------+
| 1 | 1234567 | 7654321 |
+--------------------+--------------------+-------------+