SQL列中的XQuery比较表达式
我希望有一个可以存储的表,以便在查询中计算它们 如果可能的话,我一直在做一些研发工作,我正在努力 如果我将一个XQuery表达式放在一列中,那么它的计算结果似乎与直接将XQuery表达式放在查询中的计算结果不同。例如,当我运行以下查询时:SQL列中的XQuery比较表达式,sql,sql-server,sql-server-2008,xquery,xquery-sql,Sql,Sql Server,Sql Server 2008,Xquery,Xquery Sql,我希望有一个可以存储的表,以便在查询中计算它们 如果可能的话,我一直在做一些研发工作,我正在努力 如果我将一个XQuery表达式放在一列中,那么它的计算结果似乎与直接将XQuery表达式放在查询中的计算结果不同。例如,当我运行以下查询时: declare @x xml = '' create table #condition ( condition nvarchar(255) ) insert into #condition values ('''1''=''1''') se
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子句中实现这一点
我已经将上面的示例放入一个封装中,它非常有用
非常感谢尝试以下查询:
申报
@x xml=
创建表条件
条件nvarchar255
插入条件
价值观
'1=1'
选择
条件
当col1与col2相似时,则“True”或“False”结束col,
克尔
从…起
选择
条件
PARSENAMEREPLACEcondition“=”,“.”,2列1,
PARSENAMEREPLACEcondition,“=”,“.”,1列2,
@x、 查询'1=1'作为查询
从状态
base简短回答:很遗憾,你不能
sql:columncondition将根据表列类型计算为合适的XML基元数据类型。在这种情况下,条件列中的值将始终作为XML字符串类型而不是XQuery语句进行计算,正如您在运行示例查询时所发现的那样。我看不到如何计算动态XQuery语句,除非您希望动态构造整个查询,并在以后可能使用执行它。Hi,这对简单的X=Y语句有效,但对更复杂的XQuery语句(如X>Y,X+YHi)无效,我越深入研究它,我越了解为什么动态XQuery语句是不可能的。我认为您可以篡改它的唯一方法是按照您的建议使用动态sql,但在这种情况下,我不希望使用该解决方案。谢谢你给我指明了正确的方向!回到这张图纸上。。。