SQL 列中的 XQuery 比较表达式

XQuery Comparison Expressions in SQL Column

我想要一个可以存储 XQuery Comparison Expressions 的 table,以便我可以在查询中评估它们。

如果可能的话,我一直在做一些研发,但我正在努力。

如果我将 XQuery 表达式放入列中,那么它的计算结果似乎与我将 XQuery 表达式直接放入查询中的计算结果不同。例如,当我 运行 以下查询时:

declare 
  @x xml = ''

create table #condition
(
    condition nvarchar(255)
)

insert into #condition
values
('''1''=''1''')

select 
  condition, 
  @x.query('sql:column("condition")'),
  @x.query('''1''=''1''')
from #condition

我希望这样 return:

'1'='1', true, true

然而实际上 returns:

'1'='1', '1'='1', true

有人知道如何计算存储在列中的比较表达式吗?

最终计划是能够使用此技术根据存在的 XQuery 条件过滤掉 table 的行。所以最终我希望能够在 select 语句的 where 子句中执行此操作。

我已经将上面的示例放入一个 sql fiddle 包中,它很有用。

非常感谢

试试这个查询:

声明 @x xml = ''

创建table #condition ( 条件 nvarchar(255) )

插入#condition 价值观 ('''1''=''1''') select 健康)状况, case when col1 like col2 then 'True' else 'False' END col, 酷儿 来自
( select 健康)状况, PARSENAME(REPLACE(条件,'=','.'),2) col1, PARSENAME(REPLACE(条件,'=','.'),1) col2 , @x.query('''1''=''1''') 作为问题 来自#condition )基础

简短回答:很遗憾,您不能。

sql:column("condition") 将根据 table 列类型评估为 suitable XML 原始数据类型。在这种情况下,condition 列中的值将始终被评估为 XML string 类型而不是 XQuery 语句,正如您从 运行 示例查询中了解到的那样。而且我无论如何也看不到评估动态 XQuery 语句,除非您想动态构造整个查询并稍后可能使用 sp_executesql.

执行它