我想要一个可以存储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封装中,这很有用。
非常感谢
答案 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
)基