2012-10-24 6 views
5

ich einen Tabellenname Student habe mit (StudentID, student, Adresse, PHONENO)Problem im Zusammenhang mit where-Klausel in SQL Server

Ich habe einen Filter für Benutzer zur Verfügung gestellt nur StudentID von Combobox um die Details von Studenten zu bekommen ... und erzeuge Bericht.

ich folgende Abfrage geschrieben haben Schüler Details zu erhalten:

(select * from Students where StudentId = stdId) 

Hier stdId ist ein Parameter, die ich aus dem Code übergeben

Es funktioniert gut, wenn ich einzelne StudentID wählen .... Aber in Benutzer Auswahl Comobobox ich habe bereitgestellt auch "ALL" wenn Benutzer All Wählen Sie aus Combobox ich möchte Informationen anzuzeigen aller Schüler

Also, was soll ich in stdId passieren, wenn der Benutzer wählt All?

I verwendet Inline-Abfrage in C# (nicht unter Verwendung von SQL Stored Procedure)

+2

Schreiben Sie einfach einen Fall mit einer Abfrage ohne eine WHERE-Klausel für, wenn der Benutzer alle auswählt? Für alle anderen Fälle verwenden Sie diese Abfrage – middelpat

Antwort

6

Sie können es so machen.

Wenn "All" im Kombinationsfeld ausgewählt ist, übergeben Sie null in Ihrem @studenten-Parameter. Wenn Sie nicht null in Parameter übergeben kann dann passieren -1 oder alles, was nicht in ihr combox Option und tun es wie folgt enthalten sein: (falls -1 = Alle)

SELECT * from Students s 
WHERE s.studentId = @StudentId or @StudentId=-1 

Sie auch die Antwort gegeben versuchen können, von Curt.

6

Wenn der Benutzer alle auswählt, übergeben NULL-@StudentId und Ihre Abfrage ändern:

select * 
from Students 
where ([email protected] OR @StudentId IS NULL) 
4

In der gespeicherten Prozedur-Header ändern die Definition von @StudentId, so dass es als NULL übergeben werden kann.

ALTER PROCEDURE dbo.WhateverYourProcedureIsCalled(@StudentId int = null) 

dann Ihre ändern WHERE-Klausel wie folgt

...

SELECT * from Students 
WHERE @StudentId IS NULL OR StudentId = @StudentId 

aus dem Code, wenn ALL übergeben wird, können Sie den Teil auslassen, wo Sie den Wert der eingestellten @ StudentId Parameter. SQL Server verwendet den Standardwert, wenn er nicht übergeben wird.

1

Wenn die where-Klausel in der Abfrage enthalten ist, müssen Sie auch einen gültigen Parameterwert angeben und es ist daher nicht möglich, alle Schüler zu erhalten, wenn die where-Klausel enthalten ist.

Sie müssen Ihre Abfrage basierend auf dem in der Combobox ausgewählten Wert differenzieren. Sie können etwas wie folgt tun.

int studentId = 0; 
//Where selectedValue comes from your combobox 
Int32.TryParse(selectedValue, out studentId); 
var query = "select * from Students"; 
if (studentId > 0) 
{ 
    query = query + " where StudentId = @StudentId"; 
    //Remember to add studentId as parameter value 
}