Я хочу извлечь значение из XML, используя функцию значения XML. Путь значения в этом случае хранится в переменной. Проверьте ниже скрипт
DECLARE @keyPathNg NVARCHAR(max)
DECLARE @xml_col XML
SET @keyPathNg = '/note/to/text()'
SET @xml_col = '<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Dont forghttps://stackoverflow.com/questions/10408445/the-argument-1-of-the-xml-data-type-method-value-must-be-a-string-literalet me this weekend!</body></note>'
select @xml_col.value('(sql:variable("@keyPathNg"))[1]','nvarchar(max)') ;
Это дает вывод:
/note/to/text()
Однако, вывод должен быть Tove
Я успешно могу извлечь значение, когдаиспользуя жестко закодированный путь вместо переменной, используя приведенный ниже запрос.
select @xml_col.value('(/note/to/text())[1]','varchar(max)')
Как уже упоминалось, в моем случае путь хранится в переменной, пожалуйста, предложите.
Я прочитал этот ответ о переполнении стека Аргумент1 из метода типа данных XML «value» должен быть строковым литералом , но, как отмечено, я не получаю значение переменной в качестве выходного, возможно, я что-то упускаю.