SQL Server-OPENXML如何获取属性值
我有以下XML:SQL Server-OPENXML如何获取属性值,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有以下XML: <Field FieldRowId="1000"> <Items> <Item Name="CODE"/> <Item Name="DATE"/> </Items> </Field> 编辑:我在xml中添加了一个根节点。并演示了如何获取ID。我假设xml中有多个字段元素。这是假设您拥有起始XML;您是否有物品需要向上移动 DECLARE @T varchar
<Field FieldRowId="1000">
<Items>
<Item Name="CODE"/>
<Item Name="DATE"/>
</Items>
</Field>
编辑:我在xml中添加了一个根节点。并演示了如何获取ID。我假设xml中有多个字段元素。这是假设您拥有起始XML;您是否有物品需要向上移动
DECLARE @T varchar(max)
SET @T =
'<root>
<Field FieldRowId="1000">
<Items>
<Item Name="CODE"/>
<Item Name="DATE"/>
</Items>
</Field>
<Field FieldRowId="2000">
<Items>
<Item Name="CODE"/>
<Item Name="DATE"/>
</Items>
</Field>
</root>'
DECLARE @X xml
SET @X = CAST(@T as xml)
SELECT Y.ID.value('../../@FieldRowId', 'int') as FieldID,
Y.ID.value('@Name', 'varchar(max)') as "Name"
FROM @X.nodes('/root/Field/Items/Item') as Y(ID)
DECLARE@T varchar(最大值)
设置@T=
'
'
声明@X xml
设置@X=CAST(@T为xml)
选择Y.ID.value('../../@FieldRowId',int')作为FieldID,
Y.ID.value(“@Name”,“varchar(max)”作为“Name”
从@X.nodes('/root/Field/Items/Item')作为Y(ID)
使用节点是一种方法OPENXML
每次使用时占用SQL server内存的1/8。尽管OPENXML
和节点通常具有相同的查询性能 如标记中所述,您使用的是SQL Server 2005,它本机支持XML数据类型。为什么不使用它呢?由于应用程序中数据层的限制,SP不能使用xml数据类型输入参数。有没有一种方法可以保留VARCHAR(MAX)input参数并以某种方式将其转换为XML数据类型?因此,如果我有了XML变量,我该如何实现我想要实现的目标?您可以直接使用它,就像潜行者所展示的那样,也可以像我所说的那样使用OPENXML。
DECLARE @T varchar(max)
SET @T =
'<root>
<Field FieldRowId="1000">
<Items>
<Item Name="CODE"/>
<Item Name="DATE"/>
</Items>
</Field>
<Field FieldRowId="2000">
<Items>
<Item Name="CODE"/>
<Item Name="DATE"/>
</Items>
</Field>
</root>'
DECLARE @X xml
SET @X = CAST(@T as xml)
SELECT Y.ID.value('../../@FieldRowId', 'int') as FieldID,
Y.ID.value('@Name', 'varchar(max)') as "Name"
FROM @X.nodes('/root/Field/Items/Item') as Y(ID)