当我使用此语法时,我收到以下错误。我希望能够将参数传递给节点函数: -
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.
有人能告诉我该如何正确地做到这一点?
答案 0 :(得分:1)
您必须通过动态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