Est-ce que "autoriser plusieurs valeurs" pour les parameters peut être utilisé avec les procédures stockées dans le Générateur de rapports version 3.0?

Microsoft indique que vous ne pouvez pas autoriser plusieurs valeurs pour un paramètre dans le Générateur de rapports version 2.0 lors de l'utilisation de procédures stockées. https://technet.microsoft.com/en-us/library/Dd207127(v=SQL.100).aspx

Je ne trouve pas d'instruction similaire pour le Générateur de rapports version 3.0. Comment le générateur de rapports envoie-t-il datatables contenues dans un paramètre avec plusieurs sélections à une procédure stockée? Il semble de ce post qu'il les passe comme une ficelle, n'est-ce pas? https://www.mssqltips.com/sqlservertip/2844/working-with-multiselect-parameters-for-ssrs-reports/

Cela semble beaucoup trop compliqué d'une méthode pour décoder la string envoyée par Report Builder à la database.

Il semble que les tables peuvent être passées en tant que parameters dans la procédure stockée dans SQL Server 2008: Comment passer un tableau dans une procédure stockée SQL Server Existe-t-il un moyen de passer une table du Générateur de rapports version 3.0 à SQL Server 2008?

Oui, il peut être utilisé. Le moyen le plus simple que j'ai trouvé pour le faire est, stucture sproc, de sorte que la variable est VARCHAR (MAX) et la clause where utilise une clause d'inclusion. Ensuite, utilisez un autre sproc pour décomposer la variable délimitée par des virgules qui sera transmise.

Example @States = 'CA,NM,NY' Select * from Table Where State in (Select CSVResults from parsecsv(@States,',') 

Cela suppose bien sûr que vous avez une fonction appelée Parsecsv. Si vous en avez besoin, j'utilise

 CREATE FUNCTION [dbo].[ParseCSV] (@CSV_STR VARCHAR(8000),@Delimiter varchar(20) ) RETURNS @splittable TABLE (ID int identity(1,1), CSVvalues VARCHAR(256) ) AS BEGIN -- Check for NULL ssortingng or empty sting IF (LEN(@CSV_STR) < 1 OR @CSV_STR IS NULL) BEGIN RETURN END ; WITH csvtbl(i,j) AS ( SELECT i=1, j= CHARINDEX(@Delimiter,@CSV_STR+@Delimiter) UNION ALL SELECT i=j+1, j=CHARINDEX(@Delimiter,@CSV_STR+@Delimiter,j+1) FROM csvtbl WHERE CHARINDEX(@Delimiter,@CSV_STR+@Delimiter,j+1) <> 0 ) INSERT INTO @splittable ( CSVvalues) SELECT LTRIM(RTRIM(SUBSTRING(@CSV_STR,i,ji))) FROM csvtbl OPTION (MAXRECURSION 32767) RETURN END