如何在T-SQL中获取已解析的SQL参数

时间:2011-10-20 18:44:16

标签: tsql sql-server-2008

我有一个存储过程,它动态生成一个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。我的意思是,在一天结束时,一个参数将变成一些可以用查询中的字符串表示的数据,所以如果它发生在这里或在路的尽头似乎无关紧要。这可能吗?

0 个答案:

没有答案