Besserer path, um eine SQL-Abfrage mit mehreren Wheres zu konstruieren, die die gleiche Spalte treffen

Mein Ziel ist es, eine dynamische "Report Builder" -Anwendung zu erstellen, ohne einen String zu erstellen, der an den server als meine SQL-Abfrage übergeben wird. Ich frage mich, ob es eine gute (oder irgendeine) Weise gibt, eine where-Klausel zu machen, die eine unbekannte Menge an Möglichkeiten hat. Der beste path, den ich erklären kann, ist mit dieser Abfrage …

SELECT * FROM table WHERE column1 = 'a' OR column1 = 'b' OR column1 = 'c' OR column1 = 'd' ... 

Grundsätzlich nur eine unbekannte Menge an OR s. Ich weiß, die folgende Abfrage ist in keiner Weise nah an richtig, aber hier ist, was ich suche eine Idee von:

 @ColValues = 'a || b || c || d ...' SELECT * FROM table WHERE column1 = @ColValues; 

Im Grunde möchte ich, dass der Benutzer nur eine Variable für column1 und immer noch Ergebnisse zurückgeben kann, die auf mehreren where Klauseln basieren. Normalerweise würden die IN Operationen mein Problem lösen, Problem ist bei dieser Anwendung Ich habe keine Ahnung, wie viele Artikel in der endgültigen Klausel sein müssen. Könnte 1 Wert sein, könnte 50 sein. Auch muss von einem C # -Parameter an eine T-SQL gespeicherte Prozedur übergeben werden.

Wenn Sie streng über SQL reden, dann besser können Sie tun, ist die IN Elemente in einer Tabelle Typ Variable speichern und dann eine JOIN mit ihnen. Etwas wie

 declare @tabin table(element char(1)); insert into @tabin select 'a' union select 'b' union select 'c' union select 'd'; SELECT t1.* FROM table t1 JOIN @tabin t2 ON t1.column1 = t2.element; 

Hinweis: Was Sie versuchen zu erreichen, können getan werden, indem Sie das Beispiel in diesem Beitrag C # SQL server – Übergeben einer list auf eine gespeicherte Prozedur

Versuche so etwas

 SELECT * FROM table WHERE column1 IN ('a', 'b', 'c', 'd', ...) 

Je nach server kann folgendes funktionieren:

 SELECT * FROM table WHERE column1 IN ('a', 'b', 'c') 

Da hast du als T-SQL markiert, hier ist MSDN auf WHERE … IN: http://msdn.microsoft.com/en-us/library/ms177682.aspx

Vielleicht willst du das Schlüsselwort IN

 SELECT * FROM table WHERE column1 IN ('a','b','c', ...) 

Halten Sie alle Ihre, wo ist in einem Temp-Tisch und tun:

 SELECT * FROM table WHERE column1 IN (SELECT colVals from #temp) 

@ Rahuls Antwort ist das Beste, wenn du dynamisch (programmgesteuert) ein Array erstellen willst.

@ Scoregraphic Antwort ist am besten, wenn Sie wissen, die Werte beim Schreiben der SQL-statement (viele andere haben die gleiche Antwort wiederholt, die er gegeben hat).

Diese Antwort ist mehr für Neuheit Wert zu zeigen, wie Sie dies tun könnte, indem Sie Ihre Vermutung ändern. Potenziell nützlich, wenn Ihr Suchstring in eine function als ein einzelner characterfolgenwert anstatt einer list übergeben wurde; aber sonst würde ich diesen Ansatz wirklich nicht empfehlen:

 declare @ColValues nvarchar(100) = 'a || b || c || d' declare @table table(column1 nchar(1)) insert @table select 'a' union select 'd' union select 'h' SELECT * FROM @table where '|| ' + @ColValues+ ' ||' like '%|| ' + column1 + ' ||%'