【发布时间】:2012-03-28 02:03:26
【问题描述】:
以下代码将返回select $f/field/text() from table1
declare @x xml = '<meta><field>Column1</field></meta>';
select @x.query('
for $f in /meta
return
"select $f/field/text() from table1"
')
我尝试将返回部分更改为"select"+$f/field 或"select" $f/field,但这些无法解析。
更新:@x 将从带有for xml raw,elements 的表中生成。使用 xml/xquery 的目的是避免样板字符串连接。似乎 XQuery 无法将 xml 转换为文本?
更新问题:
下面是我要写的代码。
declare @meta table (field sysname primary key, validate varchar(8000));
insert into @meta values ('Col1', '< 100'), ('Col2', '> Col1');
declare @x xml = (select * from @meta for xml path('meta'));
select @x;
-- The following code cannot be parsed. It will be nice to replace /meta/field/text() with shorter variable too
select @x.query('
"select 1"
{"," /meta/field/text() "= case when" /meta/field/text() /meta/validate/text() "then" /meta/field/text()}
"from table1"
"where 1=1 "
{ "or (" /meta/field/text() /meta/validate/text() ")" }
')
而生成的结果应该是,
select 1
, Col1 = case when Col1 < 100 then Col1 end
, Col2 = case when Col2 > Col1 then Col2 end
from table1
where 1=1
or (Col1 < 100)
or (Col2 > Col1)
【问题讨论】:
标签: sql-server xml sql-server-2008 sql-server-2005 xquery