SQL: Storage Procedure mit mehreren Eingabewerten

kspiel

Grünschnabel
Hallo @ all,

bin ein SQL-Einsteiger und stoße grad auf ein Problem, bei dem ihr mir 100% helfen könnt.
Und zwar habe ich eine SP mit der ich eine Suche auf eine Tabelle ausführen möchte und das mit mehreren Werten,
wobei die Anzahl der Werte variiert.

z.B: mit Werten
@A
@B
@C
@D

Wenn kein wert übergeben wurde, dann wird dieser auf NULL gesetzt

@A AND @B AND @C AND @D -> geht ja nicht da nicht ale werte immer vorhanden sind

Nun meine Frage: Wie schreibe ich dasmit besten performance in einer SP?

Gruß,
kspiel
 
Code:
Create Procedure MeineProc( @a varchar(50) =null, @b varchar(50)=null, @c varchar(50)=null ....)

Grüsse bb
 
Danke für die Antwort, aber mir geht es nicht um das deklarieren der Variablen, sondern mehr um den zu erstellenden Vergleich der SP.

@A AND @B AND @C AND @D -> geht ja nicht da nicht ale werte immer vorhanden sind
l

Wie schreibe ich diese vernünftig um die den Fall abzudecken, dass ich einmal 2 Werte übergebe und einmal z.B. alle.

Ich habe erstmal es so geschaft:

Code:
CREATE PROCEDURE [dbo].[spTest]
(
	@A varchar,
	@B varchar,
	@C varchar,
	@D varchar
)
AS

DECLARE @Befehl varchar(4000)

SELECT @Befehl =	'SELECT	Spalte A, Spalte B, Spalte C
					FROM tblTest'

SELECT @Befehl = @Befehl + ' WHERE'


IF @A IS NOT NULL
BEGIN
SELECT @Befehl = @Befehl + 'blabla'
END


IF @B IS NOT NULL
BEGIN
SELECT @Befehl = @Befehl +	'blabla'
END

IF @C IS NOT NULL
BEGIN
SELECT @Befehl = @Befehl + 'blabla'
END


IF @C IS NOT NULL
BEGIN
SELECT @Befehl = @Befehl + 'blabla'
END

EXEC(@Befehl)

So hatte ich den String zusammengebaut und ausgeführt, aber ist ja nicht das klugste was man machen kann oder?
Wie kann man das anders/besser, ohne solch einen String zu bauen, machen?
Hoffe ihr versteht mein anliegen.

Gruß,
kspiel
 
Code:
SELECT	Spalte A, Spalte B, Spalte C  
FROM tblTest 
WHERE A like ''+ ISNULL(@A,'')+'%'''
And  B like ''+ ISNULL(@b,'')+'%'''
And  C like ''+ ISNULL(@b,'')+'%'''

BEM: SQLBefehle in Stored Procedures über EXEC auszuführen ist in den meisten Fällen totaler Blödsinn- der interne QueryOptimizer legt dann total unsinnige Ausführungspläne an und die Verwendung einer SP ist dann eigentlich überflüssig


LG BB
 
Code:
SELECT	Spalte A, Spalte B, Spalte C  
FROM tblTest 
WHERE A like ''+ ISNULL(@A,'')+'%'''
And  B like ''+ ISNULL(@b,'')+'%'''
And  C like ''+ ISNULL(@b,'')+'%'''

BEM: SQLBefehle in Stored Procedures über EXEC auszuführen ist in den meisten Fällen totaler Blödsinn- der interne QueryOptimizer legt dann total unsinnige Ausführungspläne an und die Verwendung einer SP ist dann eigentlich überflüssig


LG BB

Danke brainbyte,
werd heut abend probieren :)


Edit: wollte noch mal sagen hat super geklappt THX
 
Zuletzt bearbeitet:
Zurück