SSRS: Ändern Sie die SQL-Anweisung Dynamisch
Habe ich einen Bericht in SSRS 2005, basiert auf einer Abfrage, die ist ähnlich wie diese:
SELECT * FROM MyTable (NOLOCK)
WHERE col1 = 'ABC'
AND col2 LIKE '%XYZ%'
Ich muss in der Lage sein, dynamisch die UND Teil der WHERE-Klausel in der Abfrage basierend auf, ob der Benutzer aktiviert eine checkbox. Im Grunde, dies ist eine dynamische SQL-Anweisung und das ist das problem. Ich habe versucht, mehrere Ansätze leider ohne Erfolg. Ist das möglich? Tut SSRS 2005 unterstützt die dynamische SQL? Danke!
InformationsquelleAutor | 2008-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Charles hatte fast die richtige Antwort.
Sollte es sein:
Dies ist ein klassisches "Muster" in der SQL für die bedingte Prädikate. Wenn
@checked = 0
, dann wird es wieder alle passenden Zeilen der Rest des Prädikats (col1 = 'ABC'
). SQL-Server nicht auch die zweite Hälfte desOR
.Wenn
@checked = 1
dann wird es bewerten der zweite Teil derOR
und Rückkehr passenden Zeilencol1 = 'ABC' AND col2 LIKE '%XYZ%'
Wenn Sie mehrere bedingte Prädikate, die Sie miteinander verkettet werden können mit dieser Methode (während die IF-und CASE-Methoden würden schnell unhandlich).
Beispiel:
Nicht dynamisches SQL verwenden, nicht verwenden, WENN die oder FALL.
Yep, kann ich nicht befolgen, dynamischen SQL, unglaublich schwer zu Debuggen, zu pflegen oder zu aktualisieren. Einige kleinere performance-Verbesserungen wenn Sie eine große Anzahl von optionalen Parametern, aber auch mit bis zu 30 Parameter, bekam ich gute Leistungen ohne Rückgriff auf Sie.
Nicht zu erwähnen, wie gefährlich es ist, von einer Sicherheit PoV
Große Lösung. Danke.
Genial. Dies ist eine viel bessere alternative als die Richtung, die die meisten Lösungen, nehmen Sie (dynamisches sql)
InformationsquelleAutor Brannon
Wie über dieses. @geprüft, Ihre bit-variable.
Edit: Auch, wenn Sie nicht über eine gespeicherte Prozedur, verwenden Sie dann ein.
Deine Antwort ist toll, aber in dem Fall, wo wir nicht erfüllen können, auf die Datenquelle und wir haben lese- - nur Zugriff auf Daten, die strored Verfahren Ansatz wird nicht funktionieren.
InformationsquelleAutor Charles Graham
Vielleicht würde für Sie arbeiten:
Tut mir Leid, dass ich nicht verwenden SSRS viel, aber wenn man den Wert des Kontrollkästchens in der @parameter überprüft das funktionieren sollte.
Alternativ könnte man eine CASE WHEN-Anweisung.
InformationsquelleAutor Jason Stevenson
InformationsquelleAutor Leon Tayson
Dies würde die Arbeit in SSRS 2000, aber als letzten Ausweg verwendet.
(schlecht) PSEUDOCODE
Check-out Ausführung "Dynamic" SQL-Abfragen. aus dem Hitchhiker ' s Guide to SQL Server 2000 Reporting Services
InformationsquelleAutor jason saldo
Einen Weg, dies zu tun ist durch die Generierung der SSRS-Abfrage als Ausdruck. In die GEBOTE report designer legen Sie Ihre Abfrage in etwa so:
InformationsquelleAutor
wenn Sie gespeicherte Prozeduren verwenden, es ist wahrscheinlich einfacher, es zu tun gibt. pass in Ihre params. Erstellen Sie einen SQL-String, basierend auf Ihre Bedingungen und ein EXEC auf die sql-Zeichenfolge, Ihre gespeicherte Prozedur zurückgeben wird, die Ergebnisse, die Sie brauchen.
InformationsquelleAutor ScaleOvenStove
Können Sie auch einen anderen Ansatz und verwenden Sie die Exec-Funktion:
Beachten Sie die Verwendung von zwei Apostrophen
'
zur Markierung der zitierten Textes.InformationsquelleAutor Anthony K