Работает с обоими:
WITH q AS
(
SELECT CAST('<root><node>1</node></root>' AS XML) AS doc
)
SELECT doc.value('(/root/node)[1]', 'INT'),
doc.value(N'(/root/node)[1]', 'INT')
FROM q
Обратите внимание, что XQuery
компилируется на этапе синтаксического анализа, т.е. е. в качестве первого аргумента вы можете указать только строковый литерал (не столбец, выражение или переменную).
Этот строковый литерал не имеет «типа», поскольку тип принимает набор возможных значений, которые известны только во время выполнения, а функции XML
принимают только литеральные выражения XQuery
, которые должны быть известны во время компиляции.
Вы не можете передавать их из аргументов, функций или переменных, вы можете только жестко закодировать их в запрос.
Обращайтесь с ними как с зарезервированными словами (например, SELECT
или UPDATE
), которые по некоторым причинам должны быть заключены в одинарные кавычки.
Вы должны построить весь запрос динамически, если хотите, чтобы XQuery
был динамическим.