我在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;必须是字符串文字。
答案 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 强>
警告!
请注意,您应该始终检查用户输入。