У меня есть хранимая процедура, которая динамически генерирует оператор SQL и включает параметризованную информацию, которую клиент передает ей.
Обычно я мог бы использовать sp_executesql
для прямой передачи параметров.Однако я хочу иметь возможность передать этот оператор SQL в другую хранимую процедуру общего назначения, которая используется для возврата определенной страницы данных для данного запроса.Так что нетрудно передать произвольные параметры в конец строки.
Есть ли способ, с помощью которого 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 для механизма декодирования параметров.Я имею в виду, что в конце дня параметр превратится в некоторые данные, которые могут быть представлены строкой в запросе, поэтому кажется неактуальным, если это происходит здесь или в конце пути.Это возможно?