2012-03-28 6 views
0

meinen Tisch:Wie überprüft man mehr Spaltenwerte gleichzeitig in SQL Server 2008?

id address tag 
1 test class1 
2 test1 class2 
3 test3 class3 

In UI ich bin Anzeige aller Tag-Namen als Kontrollkästchen. Wenn der Benutzer einen oder mehrere Tag-Namen auswählt, müssen die erforderlichen Adresswerte abgerufen werden. wie kommt man? Wenn der Benutzer class1, class2 in UI auswählt, dann müssen Sie test, test1 als Ergebnis erhalten. Bitte sagen Sie mir, wie Sie Abfrage in SQL Server 2008 dafür schreiben.

EDIT CODE:

taglist = "class1,class2"; 
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString); 
       SqlCommand cmd = new SqlCommand("usp_GetTags", con); 
       cmd.Parameters.Add("@Tags", SqlDbType.VarChar).Value = taglist; 

       con.Open(); 

       cmd.CommandType = CommandType.StoredProcedure; 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 

während die Parameter übergeben, wie oben keine Ergebnisse.Wenn bekommen i Einzel taglist pass = class1 results.but taglist = "class1, class2" nicht immer bekommen jede resuls.please sagen mir, wie man mehrere Parameter von der UI übergibt.

Antwort

1

Sie können die Abfrage in SQL Server mit dem Schlüsselwort IN schreiben.

Select address from mytable where tag IN ('class1','class2') 

EDIT:

Fügen Sie die Parameter mit den Werten der gespeicherten Prozedur wie diese. Der Code unten ist in C# .net geschrieben

  comand.Parameters.AddWithValue("@Parameter1", "class1"); 
      comand.Parameters.AddWithValue("@Parameter2", "class2"); 

EDIT 2: Es ist sehr einfach in einem einzigen String setzen alle Werte, entsprechend Ihrer Anfrage passt auch. Schreiben Sie die Abfrage in Ihrer gespeicherten Prozedur wie

  Select address from mytable where tag IN (@SingleParameter) 

und in Ihrem codierenden Teil Schreib wie

folgen
  string SingleParameter = ""; 
      SingleParameter = "class1,class2,class3"; 
      comand.Parameters.AddWithValue("@SingleParameter",SingleParameter); 

EDIT 3: Schließlich fand ich die Lösung für Ihr Problem. Schreiben Sie eine gespeicherte Prozedur, wie unten

ALTER PROCEDURE dbo.TestSP 
    /* 
    (
    @parameter1 int = 5, 
    @parameter2 datatype OUTPUT 
    ) 
    */ 
    @SingleParameter varchar(30) 
AS 
    /* SET NOCOUNT ON */ 
    declare @tags varchar(500) 
    set @tags = @SingleParameter 
    create table #t (tag varchar(10)) 
    set @tags = 'insert #t select ' + replace(@tags, ',', ' union select ') 
    exec(@tags) 
     Select address from sample1 where (tag in (select tag from #t)) 
    drop table #t 
    RETURN 

und auch die Parameter senden SingleParameter wie unten

  string SingleParameter = ""; 
      SingleParameter = "'class1','class2','class3'"; 
      comand.Parameters.AddWithValue("@SingleParameter",SingleParameter); 
+0

Ich habe versucht, aber immer Fehler als ungültige Spaltennamen class1, class2. – user1237131

+0

@ user1237131, die class1 und class2 sind keine Spalten rechts, sie sind Werte in der Tag-Spalte. –

+0

S sie sind Spaltenwerte in Tag Spalte.Ich versuche oben Syntax aber Fehler als "Ungültige Spalte Name 'Klasse1'" wie das – user1237131