XML数据类型方法的参数1" query"必须是字符串文字

时间:2017-07-31 06:14:52

标签: sql-server sql-server-2008 tsql

我在SQL Server中有xml格式的数据。现在我试图根据我的查询找出单个记录。我将我的代码放在下面,

declare @xml xml
declare @ID varchar
set @ID = '1'
set @xml = '
<row>
    <Id>1</Id>
    <name>OM</name>
</row>
<row>
    <Id>2</Id>
    <name>JAI</name>
</row>
<row>
    <Id>2</Id>
    <name>JAGDISH</name>
</row>
'

当我执行查询时,它会给我一个正确的结果(xml节点):

Select @xml.query('/row[Id="1"]');

但是当我将@ID连接到查询时,它会给我一个错误:

Select @xml.query('/row[Id='+ @ID +']');

错误是:

  

XML数据类型方法的参数1&#34; query&#34;必须是字符串文字。

2 个答案:

答案 0 :(得分:3)

您需要sql:variable() XQuery扩展函数来引用变量。此函数(从链接引用)“公开一个包含XQuery表达式中的SQL关系值的变量”。

Select @xml.query('/row[Id=sql:variable("@ID")]');

答案 1 :(得分:0)

您可以使用动态SQL:

IF TRY_PARSE(@ID AS INT) IS NULL
   THROW 50000, 'ID is not integer',1;


DECLARE @sql NVARCHAR(MAX) = 'Select @xml.query(''/row[Id=<placeholder>]'')';

SET @sql = REPLACE(@sql, '<placeholder>', @Id);

EXEC sp_executesql @sql, N'@xml XML', @xml;

<强> Rextester Demo

警告!

请注意,您应该始终检查用户输入。