2009-08-03 2 views
1

Согласно BOL на value() Method (xml Data Type),Каков тип XQuery, переданный методам типа данных SQL Server XML?

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

  • XQuery
  • SQLType

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

End Цель: Для того, чтобы создать утилиту UDF/sprocs, которые использует XML Data Type methods.

ответ

1

Он работает с обоими:

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

+0

Я очень шокирован тем, что не могу передать значение XQuery в качестве параметра, но только как «строковый литерал» ... – Sung

+1

@Sung Meister: они не ожидают «типа», они ожидают, что набор зарезервированных слов будет закрыт в одинарные кавычки, необязательно с надписью «N». Не обманывайтесь тем, что это выглядит как «VARCHAR» или «NVARCHAR»: это ни один из них. – Quassnoi

+0

Похоже, что BOL довольно вводит в заблуждение в описании параметра XQuery - «Является строкой, выражением XQuery ...». Они ничего не упоминают о методах XML Data, ожидающих «набор зарезервированных слов, заключенных в одинарные кавычки» – Sung

Смежные вопросы