Bedingt eine WHERE-Klausel in SQL ausführen

7

Ich habe eine Anwendung in einer SQL Server 2008-Datenbank. Diese Datenbank verfügt über eine gespeicherte Prozedur, die eine der Tabellen abfragt. Diese gespeicherte Prozedur benötigt zwei Parameter: userName und ID

Der Parameter userName wird immer übergeben. Das ID-Feld wird jedoch entweder NULL oder ein tatsächlicher Wert sein. Wenn der Wert etwas anderes als NULL ist, muss ich es in der WHERE-Klausel meiner Abfrage berücksichtigen. Leider bin ich nicht überzeugt, wie das geht. Derzeit versuche ich

%Vor%

Danke für Ihre Hilfe!

    
user70192 29.07.2010, 15:08
quelle

7 Antworten

10
%Vor%     
Michael Pakhantsov 29.07.2010, 15:10
quelle
3

Versuchen Sie Folgendes:

%Vor%     
kbrimington 29.07.2010 15:11
quelle
3

Gruppieren Sie die Bedingungen zusammen

%Vor%     
KallDrexx 29.07.2010 15:14
quelle
2
%Vor%

Beachten Sie, dass dies in einigen Fällen zu einem nicht optimalen Abfrageplan führen kann. Das ist wahrscheinlich keine große Sache in diesem Fall, es sei denn, Ihre Tabelle ist riesig und Sie haben keinen Index für Benutzername und ID.

    
Tom H 29.07.2010 15:11
quelle
1

Hoffentlich effizienter als die Verwendung einer OR-Bedingung:

%Vor%

Hinweis: Funktioniert nur, wenn ID ein nicht NULL-fähiges Zeichenfeld ist. (Sie können CAST und COALESCE auch für t. [ID] verwenden, aber dann ist es wahrscheinlich nicht effizienter als eine OR-Bedingung.)

Alternativ können Sie dynamisches SQL in Ihrer gespeicherten Prozedur verwenden, um die Bedingung t. [ID] vollständig wegzulassen, wenn @ID NULL ist.

    
Mark Bannister 29.07.2010 15:53
quelle
1
___ qstntxt ___

Ich habe eine Anwendung in einer SQL Server 2008-Datenbank. Diese Datenbank verfügt über eine gespeicherte Prozedur, die eine der Tabellen abfragt. Diese gespeicherte Prozedur benötigt zwei Parameter: userName und ID

Der Parameter userName wird immer übergeben. Das ID-Feld wird jedoch entweder NULL oder ein tatsächlicher Wert sein. Wenn der Wert etwas anderes als NULL ist, muss ich es in der WHERE-Klausel meiner Abfrage berücksichtigen. Leider bin ich nicht überzeugt, wie das geht. Derzeit versuche ich

%Vor%

Danke für Ihre Hilfe!

    
___ answer3364062 ___

Gruppieren Sie die Bedingungen zusammen

%Vor%     
___ answer3364019 ___
%Vor%     
___ answer3364028 ___

Versuchen Sie Folgendes:

%Vor%     
___ answer3364026 ___
%Vor%

Beachten Sie, dass dies in einigen Fällen zu einem nicht optimalen Abfrageplan führen kann. Das ist wahrscheinlich keine große Sache in diesem Fall, es sei denn, Ihre Tabelle ist riesig und Sie haben keinen Index für Benutzername und ID.

    
___ answer336636 ___
%Vor%     
___ answer3364441 ___

Hoffentlich effizienter als die Verwendung einer OR-Bedingung:

%Vor%

Hinweis: Funktioniert nur, wenn ID ein nicht NULL-fähiges Zeichenfeld ist. (Sie können CAST und COALESCE auch für t. [ID] verwenden, aber dann ist es wahrscheinlich nicht effizienter als eine OR-Bedingung.)

Alternativ können Sie dynamisches SQL in Ihrer gespeicherten Prozedur verwenden, um die Bedingung t. [ID] vollständig wegzulassen, wenn @ID NULL ist.

    
___ qstnhdr ___ Bedingt eine WHERE-Klausel in SQL ausführen ___ answer3364085 ___
%Vor%     
___
dave 29.07.2010 16:10
quelle
0
%Vor%     
Amit 29.07.2010 15:16
quelle

Tags und Links