回答

收藏

如何在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]应能工作。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则