我有以下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
,要么输入医生不接受的保险。
表单截图:
来自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查询以实现该目标或使用后面的代码。
我目前有一个只显示每列的转发器。
答案 0 :(得分:2)
好的,这是我第一次使用SQLFiddle提供链接。我测试了它,它对我有用。如果由于某种原因失败,我道歉。
您的HTML列看起来像是一个varchar列。如果将其更改为XML列,则可以使用XML查询函数。这是SQL Fiddle。
此外,如果可能,您应该重新构建XML以删除&#34; notIns1&#34; ...&#34; notIns10&#34;元素并用一组&#34; notIns&#34;替换它们。元素。 (类似于良好的规范化规则。)