Following methods accept a string literal for XQuery parameter
So you cannot pass a variable to those methods for XQuery parameter.
That also means you cannot create UDFs or Stored Procedures to pass XQuery expession as following example shows.
declare @XQVarchar varchar(100), @XQNvarchar nvarchar(100)
select
@XQVarchar ='(/root/node)[1]', @XQNvarchar =N'(/root/node)[1]'
;
WITH q AS (SELECTCAST('<root><node>1</node></root>'ASXML)AS doc)
SELECT
doc.query(@XQVarchar), doc.query(@XQNvarchar),
doc
.value(@XQVarchar,'INT'), doc.query(@XQNvarchar,'INT')
FROM
q
Above statement will generate following error
Msg 8172, Level 16, State 1, Line 3
The argument 1 of the xml data type method "query" must be a string literal.