将参数传递给T-SQL节点方法(XML CROSS APPLY)

时间:2011-10-30 16:35:54

标签: sql-server-2008 tsql

当我使用此语法时,我收到以下错误。我希望能够将参数传递给节点函数: -

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 个答案:

答案 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