我的应用程序中有一个复选框,可以有3个选项之一:
如果选中“使用客户...”框,则带有指向它的箭头的框会变灰&该值将从数据库中删除。 如果选中,“True” 如果未选中,但未选中“使用客户...”,则“为假” 如果选中“使用客户...”,则没有记录。
我的问题是为它拉动SQL。我可以毫无问题地拉出TRUE / FALSE值。如果记录是空白的话,我一直试图让t-sql返回SOMETHING。
目前我的工作正常:
CASE when cb.tvalue.value('declare namespace y="http://schemas.xyzpdg.com/framework/resources";y:Item[1]', 'varchar(25)') = 'True' THEN 'Checked'
when cb.tvalue.value('declare namespace y="http://schemas.xyzpdg.com/framework/resources";y:Item[1]', 'varchar(25)') = 'False' THEN 'Unchecked'
END AS [CheckboxValue]--
我尝试过使用:
When COUNT(cb.tvalue.value('declare namespace y="http://schemas.xyzpdg.com/framework/resources";y:Item[1]', 'varchar(25)')) = 0 then 'Use Customer...'
但是当我使用它时,我当然会得到臭名昭着的......“ 在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。” 错误。我不能将XML用作GROUP BY。
有什么想法吗?谢谢。
答案 0 :(得分:1)
如果我理解正确,似乎您可以使用exist
xml类型方法或只是case语句的else
分支,请参阅示例:
declare @xml xml;
--set @xml = '<Test><Item>False</Item></Test>';
--set @xml = '<Test><Item>True</Item></Test>';
set @xml = '<Test />';
select
case
when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'True' then 'Checked'
when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'False' then 'Unchecked'
when @xml.exist('(/Test/Item)[1]') = 0 then 'Use Customer...'
end [CheckboxValue];
select
case
when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'True' then 'Checked'
when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'False' then 'Unchecked'
else 'Use Customer...'
end [CheckboxValue];