SQL列中的XQuery比较表达式

时间:2015-08-05 23:14:48

标签: sql sql-server sql-server-2008 xquery xquery-sql

我想要一个可以存储sql fiddle的表格,以便我可以在查询中对它们进行评估。

如果可能的话,我已经做了一些R& D,而且我正在努力。

如果我在一个列中放置一个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

我希望这会回来:

'1'='1', true, true

然而它实际上会返回:

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

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

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

我已将上述示例放入http://plnkr.co/edit/Y3WCBVq7DyluaJBY1EOp?p=preview封装中,这很有用。

非常感谢

2 个答案:

答案 0 :(得分:1)

简答:很遗憾你不能。

sql:column("condition")将根据表列类型评估为合适的XML原始数据类型。在这种情况下,condition列的值将始终被评估为XML string类型而不是XQuery语句,正如您在运行示例查询时所想到的那样。我无论如何都看不到评估动态XQuery语句,除非你想动态构造整个查询并在以后使用sp_executesql执行它。

答案 1 :(得分:0)

尝试此查询:

声明   @x xml =''

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

插入#condition 值 ( '' '1' '=' '1' '') 选择     条件,     如果col1像col2那样'case',否则'False'END col,     QUER 从
(     选择       条件,       PARSENAME(REPLACE(condition,'=','。'),2)col1,       PARSENAME(REPLACE(condition,'=','。'),1)col2,       @ x.query('''1''=''1''')作为查询     来自#condition )基