큰 select
쿼리를 수행하기 위해 SQL Server 2008 저장 프로 시저를 작성해야하며 프로 시저의 매개 변수를 통해 필터링 유형을 지정하여 결과를 필터링해야합니다. 다음과 같은 몇 가지 해결책을 찾았습니다.WHERE 절을 매개 변수로 지정 하시겠습니까?
create table Foo(
id bigint, code char, name nvarchar(max))
go
insert into Foo values
(1,'a','aaa'),
(2,'b','bbb'),
(3,'c','ccc')
go
create procedure Bar
@FilterType nvarchar(max),
@FilterValue nvarchar(max) as
begin
select * from Foo as f
where case @FilterType
when 'by_id' then f.id
when 'by_code' then f.code
when 'by_name' then f.name end
=
case @FilterType
when 'by_id' then cast(@FilterValue as bigint)
when 'by_code' then cast(@FilterValue as char)
when 'by_name' then @FilterValue end
end
go
exec Bar 'by_id', '1';
exec Bar 'by_code', 'b';
exec Bar 'by_name', 'ccc';
이 방법이 효과가 없다는 것을 알고 있습니다. 모든 열을 nvarchar(max)
으로 전송하고 문자열로 비교할 수는 있지만 성능이 저하 될 것으로 생각됩니다.
EXEC sp_executesql
과 같은 구문을 사용하지 않고 저장 프로 시저에서 where
절을 매개 변수화 할 수 있습니까?
LinQ to SQL을 사용해 보셨나요? –