【发布时间】:2011-08-14 16:21:46
【问题描述】:
这是一个名为 objects 的表的 DataFields 字段中的值:
<data><styleid>287634</styleid><c1001>S</c1001><c1002>S</c1002><c1004>S</c1004></data>
我需要这样做:
Select into objectsindex (product, typeid, classid, objectid, FieldName, FieldValue)
Values
select
product,
typeid,
classid,
objectid,
FieldName = 'c1001',
FieldValue = CONVERT(xml, DataFields).value('(/data/c1001/node())[1]', 'nvarchar(1)')
from objects where typeid = 45
对于该字段中的每个 XML 节点(除了 <data></data> 和 <styleid></styleid> 节点)以及对象表中 typeid = 45 的每条记录。
'c1001' 和 /c1001/ 值是变量,需要从 DataFields 字段中提取。
我将 c# 放在标题中是因为我想你们中的许多人会告诉我这不仅仅是 SQL 的工作。但我知道那里有一些真正的 SQL Geniuses,所以我希望有一个 SQL 解决方案。
【问题讨论】:
-
也尝试为 XQuery 重新标记。由于节点名称是可变的,因此可能有一个解决方案可以将其全部保存在 T-SQL 中。