2009-06-05 8 views
3

Ich habe einen Bericht, der einen mehrwertigen Parameter in eine "in" -Anweisung in einer Abfrage verwendet. Zum Beispiel (mit @areas als Mehrwert-Parameter):Wie wird ein Reporting Services-Multi-Value-Parameter an eine SQL Server-Funktion gesendet?

select * from regions where areas in (@areas) 

Es funktioniert perfekt, aber jetzt muss ich die gleichen Parameter an eine Funktion in der SQL Server 2005-Datenbank senden:

select name, myFunction(@areas) from regions where areas in (@areas) 

Der @areas-Parameter in der Funktion wird auch in einer "in" -Anweisung verwendet. Ich habe versucht, es mit einem Varchar-Parameter zu erhalten, aber das verursacht einen Fehler. Wenn ich die SQL Profiler verwenden, sehe ich, dass der Parameter in diesem Format übergeben wird:

N''1'',N''2'',N''3'' 

Die spezifischen Fragen hier sind, welche Datentypen müssen die Funktionsparameter @areas sein? Und wie kann ich diesen Parameter in einer "in" -Anweisung in der Funktion verwenden?

Dank

+0

http://munishbansal.wordpress.com/2008/12/29/passing-multi-value-parameter-in-stored-procedure-ssrs-report/ –

Antwort

2

Generell gilt: Wenn Sie in einer Liste eines bestimmten Typs als Parameter übergeben werden werden, gehen zu wollen, können Sie es als varchar einer groß genug Länge passieren in die Gesamtheit der es zu handhaben . Sie könnten es auch als XML-Parameter übergeben, aber ich habe es immer vorgezogen, die varchar-Route zu verwenden und sie auf diese Weise zu analysieren.

+0

TheTXI, während ich mit Ihrer Antwort einverstanden, es ließ mich wollen für mehr Details. :-) [Hier ist ein toller Beitrag] (http://geekswithblogs.net/GruffCode/archive/2012/06/21/using-table-valued-parameters-with-sql-server-reporting-services.aspx) auf alle die schrecklichen blutigen Details, die nötig waren, um den Job zu erledigen. Es ist wirklich schrecklich, es ist verwirrend, dass Microsoft diesen Bedarf nicht besser vorausgesehen hat. – moodboom

1

für SQL 2008 gibt es Tabellenwert params wie erwähnt. Andernfalls besteht die einzige Möglichkeit darin, sie als gepackten Wert (entweder durch Kommas getrennte Varietät in Varchar oder XML) zu übergeben oder eine temporäre Tabelle zu füllen und die Funktion aus der temporären Tabelle lesen zu lassen. Wenn Sie mehrere Funktionen mit derselben großen Eingabe aufrufen, ist die temporäre Tabelle wahrscheinlich die beste Route, sodass Sie sie nicht weiter analysieren müssen. Wenn die native Eingabe xml ist (d. H. Sie haben eine Eingabe von einem externen Partner wie Facebook), ist es normalerweise am besten, sie als XML beizubehalten. Wenn es nur eine bescheidene Liste von Ints ist, dann ist eine Liste von durch Komma getrennten Werten nicht schlecht.

Verwandte Themen