Damian Karwacki

Damian Karwacki Informatyk, Urząd
Marszałkowski
Województwa
Śląskiego

Temat: Procedura, parametry i report has too many arguments...

Witam,
mam napisana procedurę która wyciąga z bazy dane w zależności od wybranych parametrów. Na raporcie właściwości jednego z parametrów ustawione mam na multiple values. Po uruchomieniu raportu i wybraniu więcej niż jednej pozycji z rozwijanej listy otrzymuje komunikat:
'procedure or function Report10 has too many arguments specified'.
W treści procedury gdy porównuje zadane parametry z pozycjami w bazie korzystam z IN czyli a.dana IN (@parametr). Czy mógłbym prosić o wskazówkę co robię źle?

konto usunięte

Temat: Procedura, parametry i report has too many arguments...

Damian Karwacki:
Witam,
mam napisana procedurę która wyciąga z bazy dane w zależności od wybranych parametrów. Na raporcie właściwości jednego z parametrów ustawione mam na multiple values. Po uruchomieniu raportu i wybraniu więcej niż jednej pozycji z rozwijanej listy otrzymuje komunikat:
'procedure or function Report10 has too many arguments specified'.
W treści procedury gdy porównuje zadane parametry z pozycjami w bazie korzystam z IN czyli a.dana IN (@parametr). Czy mógłbym prosić o wskazówkę co robię źle?

Ja myślę że coś robisz źle ale łatwiej by było jak byś napisał co to za baza, co to za raport (system raportowy). Trochę musisz rozwinąć myśl.
Damian Karwacki

Damian Karwacki Informatyk, Urząd
Marszałkowski
Województwa
Śląskiego

Temat: Procedura, parametry i report has too many arguments...

faktycznie,
Baza postawiona na SQL Server 2008, raport tworzony za pomocą Visual Studio 2008 korzystający z usługi Reporting Services
Damian Skrzypczak

Damian Skrzypczak Lider zespołu BI

Temat: Procedura, parametry i report has too many arguments...

Witam,

W jaki sposób został zdefiniowany dataset dla tej procedury?

Podejrzewam, że wybrałeś typ Query i odpalasz procedurę za pomocą komendy exec <nazwa_procedury> @parametry. Jeśli tak to zmień typ na Stored Procedure i wybierz odpowiednią procedurę bez podawania parametrów (RS sam je wczyta).

Pozdrawiam
Damian Karwacki

Damian Karwacki Informatyk, Urząd
Marszałkowski
Województwa
Śląskiego

Temat: Procedura, parametry i report has too many arguments...

Dataset zdefiniowany był jako typ Query i wywoływany za pomocą exec tak jak podejrzewałeś. Zmieniłem na Stored Procedure i wynik jest taki, że po wybraniu więcej niż jednej pozycji z listy nie wyskakuje błąd ale tez nie wyświetlane są żadne dane. Przy pojedynczym wyborze działa normalnie (dobrze)
Damian Skrzypczak

Damian Skrzypczak Lider zespołu BI

Temat: Procedura, parametry i report has too many arguments...

Rzeczywiście po wybraniu więcej niż jednej pozycji z listy ten sposób nie działa, ponieważ wszystkie wartości łączone są w jeden łańcuch znaków i w tej postaci przekazywane do procedury.

Znalazłem jednak inne rozwiązanie:
http://stackoverflow.com/questions/512105/passing-mult...

Przetestowałem i działa.Damian Skrzypczak edytował(a) ten post dnia 11.04.12 o godzinie 15:47
Damian Karwacki

Damian Karwacki Informatyk, Urząd
Marszałkowski
Województwa
Śląskiego

Temat: Procedura, parametry i report has too many arguments...

kurcze ilekroć do tego siądę niestety nie umiem tego zastosować ;/. Czy mógłbyś mi to przedłożyć na jakimś bardziej przystępnym przykładzie? byłbym wdzięczny
Damian Skrzypczak

Damian Skrzypczak Lider zespołu BI

Temat: Procedura, parametry i report has too many arguments...

Ok., poniżej rozwiązanie w 3 krokach (jeżeli Dataset zdefiniowany jest jako typ Stored Procedure to 1 możesz pominąć):

1. W RS łączysz wartości parametru po przecinku:

Dataset Properties -> Parameters – ustawiasz wartość Parameter Value w następujący sposób:
=join(Parameters!<nazwa parametru>.Value,",")

2. W bazie/hurtowni tworzysz funkcję, która pobiera kolejne wartości (oddzielone przecinkiem) i zwraca wynik w postaci tabeli.

Poniżej definicja przykładowej funkcji:

Create FUNCTION [dbo].[fn_MVParam]
(@RepParam nvarchar(4000), @Delim char(1)= ',')
RETURNS @Values TABLE (Param nvarchar(4000))AS
BEGIN
DECLARE @chrind INT
DECLARE @Piece nvarchar(100)
SELECT @chrind = 1
WHILE @chrind > 0
BEGIN
SELECT @chrind = CHARINDEX(@Delim,@RepParam)
IF @chrind > 0
SELECT @Piece = LEFT(@RepParam,@chrind - 1)
ELSE
SELECT @Piece = @RepParam
INSERT @Values(Param) VALUES(CAST(@Piece AS VARCHAR))
SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
IF LEN(@RepParam) = 0 BREAK
END
RETURN
END

3. Modyfikujesz warunek where w procedurze składowanej w następujący sposób:

where <nazwa kolumny> IN (SELECT Param FROM dbo.fn_MVParam(@<nazwa parametru>,','))Damian Skrzypczak edytował(a) ten post dnia 12.04.12 o godzinie 11:24

Następna dyskusja:

Parametry




Wyślij zaproszenie do