Какой тип XQuery передается в методы типа данных XML SQL Server? - PullRequest
1 голос
/ 03 августа 2009

Согласно BOL для метода value () (тип данных xml) ,

value() метод принимает два аргумента

  • 1009 * XQuery *
  • SQLType

Нужно ли передавать varchar или nvarchar на value()? Как я могу узнать, какой тип XQuery или SQLType ожидает?

Конечная цель : создание служебной программы UDF / sprocs, использующей методы типа данных XML .

1 Ответ

1 голос
/ 03 августа 2009

Работает с обоими:

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 был динамическим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...