如何搜索不在SQL中查询表中的XML列的值

时间:2014-10-29 18:59:18

标签: c# asp.net sql-server xml

我有以下SQL查询:

SELECT
    [content_id] AS [LinkID]
    , dbo.usp_ClearHTMLTags(CONVERT(nvarchar(600), CAST([content_html] AS XML).query('root/Physicians/name'))) AS [Physician Name]
    , [content_status] AS [Status]
    , CAST ([content_html] AS XML).value('(root/Physicians/picture/img/@src)[1]','varchar(255)') AS [Image]
    , dbo.usp_ClearHTMLTags(CONVERT(nvarchar(600), CAST([content_html] AS XML).query('root/Physicians/gender'))) AS [Gender]
    , CAST ([content_html] AS XML).query('/root/Physicians/OfficeLocations/office1/a') AS [Office1]
    , dbo.usp_ClearHTMLTags(CONVERT(nvarchar(600), CAST ([content_html] as XML).query('/root/Physicians/langF3'))) AS [Lang3]
    , dbo.usp_ClearHTMLTags(CONVERT(nvarchar(600), CAST ([content_html] as XML).query('/root/Physicians/langF4'))) AS [Lang4]
    , dbo.usp_ClearHTMLTags(CONVERT(nvarchar(600), CAST ([content_html] as XML).query('/root/Physicians/langF5'))) AS [Lang5]
FROM
    [mydb].[dbo].[content]
WHERE
    (content_html LIKE '%'+@strInsurance+'%')

strInsurance是用户正在搜索的DropDownList值。在当前状态下,查询将搜索任何出现的事件并将其显示在结果中。

我已经设置了一个表格,其中有两个选项,要么勾选All Insurances,要么输入医生不接受的保险。

表单截图:

enter image description here

来自content_html列的示例XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Physicians>
        <name>Z H MD</name>
        <picture />
        <gender>M</gender>
        <langAccept />
        <insAll>false</insAll>
        <notIns1>
            <a href="/default.aspx?id=2871" title="Great West Healthcare">Great West Healthcare</a>
        </notIns1>
        <notIns2>
            <a href="/default.aspx?id=2862" title="Archcare Advantage SNP">Archcare Advantage SNP</a>
        </notIns2>
        <notIns3>
            <a href="/default.aspx?id=2877" title="Magnacare">Magnacare</a>
        </notIns3>
        <notIns4 />
        <notIns5 />
        <notIns6 />
        <notIns7 />
        <notIns8 />
        <notIns9 />
        <notIns10 />
        <specialty />
        <specialty2 />
        <specialty3 />
    </Physicians>
</root>

因此,除上述三项外,上述医生将接受所有保险。

我想要实现的目标:如果用户从下拉列表中选择Great West Healthcare {,则上述医生不会出现,但如果用户选择了“蓝十字蓝盾”{从下拉列表中,上述医生将出现。

如何修改SQL查询以实现该目标或使用后面的代码。

我目前有一个只显示每列的转发器。

1 个答案:

答案 0 :(得分:2)

好的,这是我第一次使用SQLFiddle提供链接。我测试了它,它对我有用。如果由于某种原因失败,我道歉。

您的HTML列看起来像是一个varchar列。如果将其更改为XML列,则可以使用XML查询函数。这是SQL Fiddle

此外,如果可能,您应该重新构建XML以删除&#34; notIns1&#34; ...&#34; notIns10&#34;元素并用一组&#34; notIns&#34;替换它们。元素。 (类似于良好的规范化规则。)