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
.
执行它
我想要一个可以存储 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
.