Benutzer mit den meisten Antworten
in(@Parameter) und case verschachtelt im SQL unter SSRS möglich?

Frage
-
Hallo zusammen,
ich nutze ein Select mit einer in-Funktion: select...... and Teil in(@TeileParameter). Die Mehrfachauswahl klappt. Die Teilliste ist sehr umfangreich, so dass bei einer Komplettauswahl der Aufbau des Berichts zu lange dauert. Gerne möchte ich eine Mehrfachauswahl selektiv zur Verfügung stellen. Eine Einfachauswahl und eine Auswahl "alle" klappt, aber sobald ich einen zweiten Artikel ergänze kommt es zu einer Fehler beim Berichtsaufruf unter SSRS. Ich vermute hier ein Problem bei der Rückgabe bei den Hochkommatas 'Teil2,'Teil2'!?. Ich nutze folgendes Select:
and Teil in (case when @TeileParameter='alle' then Teil else (@TeileParameter) end)
Kann man das Problem ggf. umgehen?
Gruß Chris
Antworten
-
Hallo Chris,
das, was Du machen willst, geht so nicht, wenn Du kein dynamisches SQL Statement einsetzt.
Also entweder stellst Du das SQL Statement als Stringvariable zusammen und führst es dann bspw. per EXEC( @SqlStatement ) oder sp_executesql @SqlStatement aus oder Du übergibst einen benutzerdefinierten Tabellentyp.
Hier mal zwei Beispiele für eine Int und eine String Liste.
CREATE TYPE [dbo].[IdListTableType] AS TABLE( [ID] [int] NULL ) CREATE TYPE [dbo].[StringListTableType] AS TABLE( [Name] [varchar(100)] NULL )
Man kann natürlich auch mehr als eine Spalte angeben, ist in deinem Fall ja aber nicht notwendig.
Wie man in einer Prozedur mit den Tabellenwertparametern umgeht, kannst Du dir bspw. hier anschauen:
https://msdn.microsoft.com/de-de/library/bb510489.aspx
https://www.mssqltips.com/sqlservertip/2112/table-value-parameters-in-sql-server-2008-and-net-c/
HTH
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Christoph Muthmann Dienstag, 10. Mai 2016 08:54
- Als Antwort markiert Aleksander Chalabashiev Montag, 23. Mai 2016 06:34
Alle Antworten
-
Hallo Chris,
das, was Du machen willst, geht so nicht, wenn Du kein dynamisches SQL Statement einsetzt.
Also entweder stellst Du das SQL Statement als Stringvariable zusammen und führst es dann bspw. per EXEC( @SqlStatement ) oder sp_executesql @SqlStatement aus oder Du übergibst einen benutzerdefinierten Tabellentyp.
Hier mal zwei Beispiele für eine Int und eine String Liste.
CREATE TYPE [dbo].[IdListTableType] AS TABLE( [ID] [int] NULL ) CREATE TYPE [dbo].[StringListTableType] AS TABLE( [Name] [varchar(100)] NULL )
Man kann natürlich auch mehr als eine Spalte angeben, ist in deinem Fall ja aber nicht notwendig.
Wie man in einer Prozedur mit den Tabellenwertparametern umgeht, kannst Du dir bspw. hier anschauen:
https://msdn.microsoft.com/de-de/library/bb510489.aspx
https://www.mssqltips.com/sqlservertip/2112/table-value-parameters-in-sql-server-2008-and-net-c/
HTH
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Christoph Muthmann Dienstag, 10. Mai 2016 08:54
- Als Antwort markiert Aleksander Chalabashiev Montag, 23. Mai 2016 06:34
-
Hallo zusammen, hallo Stefan,
vielen Dank für die Info und den Link. Ich habe eine einfache, wenn auch nicht sonderlich elegante Lösung gefunden, die zwar Spagetticodes erzeugt aber auch zum Ziel führt: