繁体   English   中英

如何查询包含XML(不是xml列类型)的SQL Server TEXT列中的值

[英]How can I query a value in SQL Server TEXT column that contains XML (not xml column type)

我有表DOCUMENTS:

DOCUMENTS
____________________
DOCUMENTID   int
USERID       int
CONTENT      text

我在SQL Server数据库中跟随存储在TEXT列中的名称为CON​​TENT的XML

<?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列。

如果有人建议怎么做,我将非常感激!

谢谢!

假面

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列中看到了Unicode(俄语?)字符。 最好在XML中使用utf-16在列类型中使用ntext

textntextntext 推出 如果这是新代码,请使用nvarchar(max)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM