연산자는 매개 변수화 될 수 없습니다. 이 저장 프로 시저입니다 언급 때문에, 유일한 옵션은 SP 내부의 T-SQL을 작성하고 sp_executesql을 사용하는 것입니다 즉
//TODO : verify (whitelist) that @operator is in a known set of values...
// '=', '<>', '>', '<' etc - otherwise security risk
declare @sql varchar(4000) = 'select * from Foo where Bar '
+ @operator + ' @value'
exec sp_executesql @sql, N'@value int', @value
이 즉시 쿼리 (@sql
)를 구축하지만, 값을 유지 (@value
) 전체적으로 매개 변수화되었으므로 연산자 (@operator
)를 화이트리스트로 작성하면됩니다. 여기
//TODO : verify (whitelist) that @operator is in a known set of values...
// '=', '<>', '>', '<' etc - otherwise security risk
declare @sql varchar(4000) = 'select * from Foo where Bar '
+ @operator + ' @p'
exec sp_executesql @sql, N'@p int', @value
, @p
가 내부 SQL에서 매개 변수의 이름이고, @value
는 매개 변수의 이름입니다
그냥 값이 매개 변수가 남아 있는지 보여주기 위해, 우리는 또한 사용할 수도
저장 프로 시저;
sp_executesql
에 대한 세 번째/네 번째/다섯 번째/etc 매개 변수는 두 번째 (이 예에서는 단지
@p
으로 선언 됨) 매개 변수로 선언 된 매개 변수에 매핑됩니다.
저장 프로 시저가 아닌 경우 C#에서 쿼리 작성 단계를 수행하여 값을 매개 변수로 다시 유지할 수 있습니다.