Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL列中的XQuery比较表达式_Sql_Sql Server_Sql Server 2008_Xquery_Xquery Sql - Fatal编程技术网

SQL列中的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

我希望有一个可以存储的表,以便在查询中计算它们

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

如果我将一个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子句中实现这一点

我已经将上面的示例放入一个封装中,它非常有用

非常感谢

尝试以下查询:

申报 @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,但在这种情况下,我不希望使用该解决方案。谢谢你给我指明了正确的方向!回到这张图纸上。。。