Передача аргумента методу узлов T-SQL (XML CROSS APPLY) - PullRequest
1 голос
/ 30 октября 2011

При использовании этого синтаксиса я получаю сообщение об ошибке ниже. Я хочу иметь возможность передать аргумент функции узлов: -

CROSS APPLY XML_TPYE_COLUMN.nodes(@p_Xpath) AS Tab(Col)

Ошибка:

The argument 1 of the XML data type method "nodes" must be a string literal.

Может кто-нибудь сказать мне, как мне сделать это правильно?

1 Ответ

1 голос
/ 30 октября 2011

Вы должны будете сделать это через динамический sql, поскольку параметр для узлов должен быть строковым литералом.Это похоже на то, что вы делаете, когда делаете sp_executesql.

Другими словами, вам нужно построить весь SQL-оператор как nvarchar (max) и передать его sp_executesql:

DECLARE @statement nvarchar(max)= N'select  ... CROSS APPLY col.nodes('+@p_Xpath+') AS Tab(Col)'

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