如何在SQL Server中创建参数化的XPath查询?
技术问答
461 人阅读
|
0 人回复
|
2023-09-12
|
我在尝试SQL Server编写参数化查询,使用参数值作为查询XPath但它似乎不能按照我的期望工作。这是我的例子:# R# O7 N0 L. E* |- t
create table ##example (xmltest xml)declare @LanguagePath varchar(75)set @LanguagePath = '(/languages/language[@id="en-US"])[1]'insert into ##example values (' c c ')insert into ##example values (' b b ')insert into ##example values (' a a ')--This is a working statement:--select * from ##example --order by xmltest.value('(/languages/language[@id="en-US"])[1]','varchar')declare @SQL nvarchar(4000)set @SQL = 'select * from ##example order by xmltest.value(@LanguagePath1,''varchar'')'exec sp_executesql @SQL,N'@LanguagePath1 varchar(75)', @LanguagePath1 = @LanguagePath;drop table ##example代码错误:xml值参数1必须是字符串文本。
6 q0 N" b& \+ r& C+ }8 A2 H4 z任何关于如何让它工作的想法?我想试试我的xpath查询免受SQL注入的影响。6 U3 _' t: Q) Z. J
- T+ B3 A# j( g2 N 解决方案: 8 d, p( {5 A( |& t! {4 _! O5 ^# C
您应该使用sql:variable("@LanguagePath1")而不是@LanguagePath1.在这里阅读更多关于它的信息。虽然我不确定动态xpath你能工作吗?)但是类似的事情xmltest.value('(/languages/language[@id=sql:variable("@languageCode")])[1]应能工作。 |
|
|
|
|
|