我有表文档:
DOCUMENTS
____________________
DOCUMENTID int
USERID int
CONTENT text
我在 SQL Server 数据库中将以下 XML 存储在名为 CONTENT 的 TEXT 列中
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<IDMSDocument>
<DocumentContent>
<Attribute Name="Number" GUID="{FFFFFFFF-0000-0000-0000-000000000001}">
<IDMSType>3060</IDMSType>
<Value Type="Integer">
<Value>122</Value>
</Value>
</Attribute>
<Attribute Name="Date" GUID="{FFFFFFFF-0000-0000-0000-000000000002}">
<IDMSType>3061</IDMSType>
<Value Type="DateTime">
<Date>10-09-2014</Date>
</Value>
</Attribute>
<Attribute Name="Публикуване" GUID="{CA646F55-5229-4FC5-AA27-494B25023F4E}">
<IDMSType>3062</IDMSType>
<Value Type="String">
<Value>Да</Value>
</Value>
</Attribute>
<Attribute Name="Дата" GUID="{AC0465B0-4FB4-49E2-B4FA-70901068FD9B}">
<IDMSType>3063</IDMSType>
<Value Type="DateTime">
<Date>01-10-2014</Date>
</Value>
</Attribute>
<Attribute Name="Предмет на поръчка" GUID="{04A4EC72-6F33-461F-98DD-D8D271997788}">
<IDMSType>3065</IDMSType>
<Value Type="String">
<Value>Избор на консултанти</Value>
</Value>
</Attribute>
</DocumentContent>
</IDMSDocument>
我找到了一种方法,如何从表中的单行中查询 dingle XML 属性,并进行大量转换:
DECLARE @strContent NVARCHAR(MAX);
DECLARE @xmlContent XML;
SET @strContent = (select content from DOCUMENTS where DocumentID=24);
SET @xmlContent = CAST(REPLACE(CAST(@strContent AS NVARCHAR(MAX)),'utf-8','utf-16') AS XML)
SELECT @xmlContent.query('/IDMSDocument/DocumentContent/Attribute[5]/Value/Value')
where @xmlContent.value('(/IDMSDocument/DocumentContent/Attribute[5]/Value/Value)[1]', 'nvarchar(max)') like '%search%'
我需要进行如下查询:“选择表中 XML 中第五个属性具有值“搜索”的所有行”
对我来说,一般问题是列类型不是 XML,但我有文本列,里面存储有 xml。当我尝试强制转换、查询、直接值服务器返回时,我只能将其与 XML 列一起使用。
如果有人建议如何做到这一点,我将非常感激!
Thanks!
Kamen
SQL Server 不允许内联 XML 转换应用函数,即: 否CAST(...).query()
,使用 CTE 来处理转换:
;WITH cte AS (
SELECT DocumentID, UserID, CAST(Content AS XML) AS XMLContent
FROM Documents
)
SELECT XMLContent.query('/IDMSDocument/DocumentContent/Attribute[5]/Value/Value')
FROM cte
WHERE XMLContent.value('(/IDMSDocument/DocumentContent/Attribute[5]/Value/Value)[1]', 'nvarchar(max)') like '%search%'
但有一件事:我在Content
柱子。使用可能会更好utf-16
在你的 XML 中和ntext
对于列类型。
text
and ntext
也都是出去的路上 http://msdn.microsoft.com/en-us/library/ms187993(v=sql.105).aspx。如果这是新代码,请使用nvarchar(max)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)