Frage

Ich schreibe einen Bericht in Visual Studio, der einen Benutzereingabeparameter übernimmt und für eine ODBC-Datenquelle ausgeführt wird.Ich möchte die Abfrage manuell schreiben und Reporting Services einen Teil der Where-Klausel durch den Parameterwert ersetzen lassen, bevor ich sie an die Datenbank sende.Was zu passieren scheint, ist, dass die @parmName Ich gehe davon aus, dass „wird“ tatsächlich als Teil der SQL-Anweisung gesendet wird.Fehlt mir irgendwo eine Konfigurationseinstellung oder ist das einfach nicht möglich?

Ich verwende die Filteroption im Tool nicht, da dadurch scheinbar der vollständige Datensatz aus der Datenbank zurückgeholt und die Filterung auf dem SQL Server durchgeführt wird.

War es hilfreich?

Lösung

Es hört sich so an, als müssten Sie die SQL-Anweisung als Ausdruck behandeln.Zum Beispiel:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value 

Wenn die where-Klausel eine Zeichenfolge ist, müssen Sie Folgendes tun:

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"

Wichtig:Verwenden Sie in Ihrem SQL-Ausdruck keine Zeilenumbrüche.Wenn Sie dies tun, erhalten Sie eine Fehlermeldung.

Holla zurück, wenn du weitere Hilfe brauchst.

Andere Tipps

Verwendet ODBC nicht das alte "?" Syntax für Parameter?Versuche dies:

select col1, col2 from table1 where col3 = ?

Die Reihenfolge Ihrer Parameter wird dann wichtig, ist aber weniger anfällig für SQL-Injection als das einfache Anhängen des Parameterwerts.

Beim Versuch, eine Access-Datenbank über ODBC abzufragen, ist das gleiche Problem aufgetreten.

Meine ursprüngliche Anfrage: SELECT A.1 FROM A WHERE A.1 = @parameter führte zu einem Fehler.Geändert in: SELECT A.1 FROM A WHERE A.1 = ?.

Anschließend müssen Sie den Abfrageparameter Ihrem Berichtsparameter zuordnen.

Ich bin etwas verwirrt über diese Frage. Wenn Sie nach einer einfachen Parameterverwendung suchen, lautet die Notation:*paramName* , jedoch wenn Sie das strukturell ändern möchten WHERE Wenn Sie eine Klausel verwenden (wie Sie es möglicherweise in SQL+ mit „?“) tun, sollten Sie tatsächlich benutzerdefinierten Code im Bericht verwenden, um eine Funktion zu definieren, die das erforderliche SQL für die Abfrage zurückgibt.

Leider können Parameter bei der Verwendung von benutzerdefiniertem Code nicht direkt in der generierten Abfrage referenziert werden, sondern ihre Werte müssen in der resultierenden Zeichenfolge verkettet sein, wodurch die Möglichkeit besteht, dass SQL Injektion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top