Expressions de comparaison XQuery dans une colonne SQL

Je voudrais avoir une table dans laquelle je peux stocker des expressions de comparaison XQuery , afin que je puisse les évaluer dans une requête.

Je fais un peu de R & D dans si c'est possible, et je me bats.

Si je mets une expression XQuery dans une colonne, alors il semble évaluer différemment si je mets l'expression XQuery directement dans la requête. Par exemple, lorsque j'exécute la requête ci-dessous:

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 

Je m'attendrais à ce que cela revienne:

 '1'='1', true, true 

Cependant, il revient réellement:

 '1'='1', '1'='1', true 

Est-ce que quelqu'un sait comment je peux évaluer les expressions de comparaison qui sont stockées dans une colonne?

Le plan éventuel est de pouvoir utiliser cette technique pour filterr les lignes d'une table en fonction des conditions XQuery présentes. Donc, finalement, je voudrais être en mesure de le faire dans la clause where d'une déclaration select.

J'ai mis l'exemple ci-dessus dans un encrier sql sql, il est utile.

Merci beaucoup

Réponse courte: Malheureusement vous ne pouvez pas.

sql:column("condition") sera évalué à un type de données primitif XML approprié en fonction du type de colonne de la table. Dans ce cas, la valeur de la colonne de condition sera toujours évaluée en tant que type de ssortingng XML au lieu d'une instruction XQuery, comme vous l'avez compris en exécutant votre exemple de requête. Et je ne vois pas comment évaluer l'instruction XQuery dynamic, sauf si vous voulez build dynamicment la requête entière et l'exécuter ultérieurement en utilisant éventuellement sp_executesql .

Essayez cette requête:

déclare @x xml = ''

create table #condition (condition nvarchar (255))

insert dans #condition values ​​('' '1' '=' '1' '') select condition, cas quand col1 comme col2 puis 'True' sinon 'False' END col, quer from
(select la condition, PARSENAME (REPLACE (condition, '=', '.'), 2) col1, PARSENAME (REPLACE (condition, '=', '.'), 1) col2, @ x.query ('' ' 1 '' = '' 1 '' ') à partir de #condition) base