如何在 T-SQL 中读取 XML 中的选项?
How to read an option from XML in T-SQL?
我有下一个 XML
文件:
<?xml version="1.0" encoding="utf-8"?>
<DynamicEntity Name="ProductsMilk">
<Field Name="Name" Type="nvarchar(256)" AllowNulls="false" />
<Field Name="Description" Type="ntext" AllowNulls="false" />
<Field Name="Price" Type="float" AllowNulls="false" />
</DynamicEntity>
我需要从 XML-node
的任何选项中读取一些值,例如我需要使用 T-SQL
.
从 Field 节点读取 Type 选项的值
如何使用 MSSQL
中的内部 OpenXML 提供程序执行此操作?
以下将从您的 XML 中提取所有数据:
DECLARE @doc VARCHAR(1000) = '<?xml version="1.0" encoding="utf-8"?>
<DynamicEntity Name="ProductsMilk">
<Field Name="Name" Type="nvarchar(256)" AllowNulls="false" />
<Field Name="Description" Type="ntext" AllowNulls="false" />
<Field Name="Price" Type="float" AllowNulls="false" />
</DynamicEntity>';
DECLARE @iDoc INT;
EXECUTE sp_xml_preparedocument @idoc OUTPUT, @doc;
SELECT *
FROM OPENXML(@iDoc, 'DynamicEntity/Field')
WITH
( DynamicEntityName VARCHAR(100) '../@Name',
FieldName VARCHAR(100) '@Name',
[Type] VARCHAR(100) '@Type',
AllowNulls VARCHAR(100) '@AllowNulls'
);
基本上,您只需为 xml 属性指定一个列映射。
解决方法如下:
DECLARE @x XML = '<?xml version="1.0" encoding="utf-8"?>
<DynamicEntity Name="ProductsMilk">
<Field Name="Name" Type="nvarchar(256)" AllowNulls="false" />
<Field Name="Description" Type="ntext" AllowNulls="false" />
<Field Name="Price" Type="float" AllowNulls="false" />
</DynamicEntity>'
SELECT t.c.value(N'../@Name', N'nvarchar(100)'),
t.c.value(N'@Name', N'nvarchar(100)'),
t.c.value(N'@Type', N'nvarchar(100)'),
t.c.value(N'@AllowNulls', N'nvarchar(100)')
FROM @x.nodes(N'/DynamicEntity/Field') t(c)
我有下一个 XML
文件:
<?xml version="1.0" encoding="utf-8"?>
<DynamicEntity Name="ProductsMilk">
<Field Name="Name" Type="nvarchar(256)" AllowNulls="false" />
<Field Name="Description" Type="ntext" AllowNulls="false" />
<Field Name="Price" Type="float" AllowNulls="false" />
</DynamicEntity>
我需要从 XML-node
的任何选项中读取一些值,例如我需要使用 T-SQL
.
如何使用 MSSQL
中的内部 OpenXML 提供程序执行此操作?
以下将从您的 XML 中提取所有数据:
DECLARE @doc VARCHAR(1000) = '<?xml version="1.0" encoding="utf-8"?>
<DynamicEntity Name="ProductsMilk">
<Field Name="Name" Type="nvarchar(256)" AllowNulls="false" />
<Field Name="Description" Type="ntext" AllowNulls="false" />
<Field Name="Price" Type="float" AllowNulls="false" />
</DynamicEntity>';
DECLARE @iDoc INT;
EXECUTE sp_xml_preparedocument @idoc OUTPUT, @doc;
SELECT *
FROM OPENXML(@iDoc, 'DynamicEntity/Field')
WITH
( DynamicEntityName VARCHAR(100) '../@Name',
FieldName VARCHAR(100) '@Name',
[Type] VARCHAR(100) '@Type',
AllowNulls VARCHAR(100) '@AllowNulls'
);
基本上,您只需为 xml 属性指定一个列映射。
解决方法如下:
DECLARE @x XML = '<?xml version="1.0" encoding="utf-8"?>
<DynamicEntity Name="ProductsMilk">
<Field Name="Name" Type="nvarchar(256)" AllowNulls="false" />
<Field Name="Description" Type="ntext" AllowNulls="false" />
<Field Name="Price" Type="float" AllowNulls="false" />
</DynamicEntity>'
SELECT t.c.value(N'../@Name', N'nvarchar(100)'),
t.c.value(N'@Name', N'nvarchar(100)'),
t.c.value(N'@Type', N'nvarchar(100)'),
t.c.value(N'@AllowNulls', N'nvarchar(100)')
FROM @x.nodes(N'/DynamicEntity/Field') t(c)