Вы должны будете сделать это через динамический 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