我有一个存储过程,它动态生成一个SQL语句,并包含客户端传递它的参数化信息。
通常我可以使用sp_executesql
直接传递参数。但是,我希望能够将此SQL语句传递给另一个通用存储过程,该过程用于返回给定查询的特定数据页。因此,将任意参数传递给行尾的sproc并非易事。
有没有办法可以让T-SQL解析参数并返回一个字符串,这样我就可以创建一个完整的,无参数的SQL字符串来传递给最终的程序?那就是:
-- bad
set @sql = 'select * from something where id=' + cast(@idParm as varchar(10))
-- good - but can't pass @sql to something that doesn't know about its parms
set @sql = 'select * from something where id=@idParm'
exec sp_executesql @sql,N'@idParm int',@idParm
-- what I want
set @sql = 'select * from something where id = '+
decode_parameter('@idParm int',@idParm)
我想不出任何理由这不是完全SQL注入安全的,假设在参数解码机制的T-SQL中有一个api。我的意思是,在一天结束时,一个参数将变成一些可以用查询中的字符串表示的数据,所以如果它发生在这里或在路的尽头似乎无关紧要。这可能吗?