Следующий код вернет 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)