Ich muss eine gespeicherte Prozedur für SQL Server 2008 für die Durchführung einer großen select
Abfrage schreiben und ich brauche es, um Ergebnisse mit Filtertyp über Prozedur Parameter zu filtern. Ich fand einige Lösungen wie folgt:Die WHERE-Klausel parametrisieren?
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';
Ich finde, dass dieser Ansatz nicht funktioniert. Es ist möglich, alle Spalten in nvarchar(max)
zu konvertieren und sie als Strings zu vergleichen, aber ich denke, dass es zu Leistungseinbußen kommen wird.
Ist es möglich, die where
-Klausel in Stored Procedure zu parametrisieren, ohne Konstrukte wie EXEC sp_executesql
zu verwenden?
Haben Sie versucht, LinQ zu SQL? –