powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / [RS 2005] multi-value parametr & stored procedure
22 сообщений из 22, страница 1 из 1
[RS 2005] multi-value parametr & stored procedure
    #33569949
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть multivalue параметр отчета, хочу использовать в процедуре типа :
... in (parametr_value1, parametr_value2 , ..., parametr_valueN)....
как можно передать multi-value парамерт отчета в параметр процедуры ? он передается как строка, массив, еще как-то ? как его обрабатывать ?
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33572290
LevS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В данном случае значения конкатенируются в строку (CSV)
---
This posting is provided "AS IS" with no warranties, and confers no rights.
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33574344
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
странно. есть процедура :
alter procedure airat_test
@param varchar
as
begin
select @param as id
end

то есть что на входе , то и на выходе. передаю ей multi-value параметр типа string. выбираю несколько значение параметра и в превью мне выдается:
Must declare scalar variable "@param"
процедура его есть не хочет :)
когда выбираюв одно значение , все ок. в чем может быть проблема ?
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33575428
LevS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я изменил вашу SP на

alter procedure airat_test
@param varchar (100)
as
begin
select @param as id
end

Возвращается то, что нужно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <DataSources>
    <DataSource Name="DataSource1">
      <ConnectionProperties>
        <IntegratedSecurity>true</IntegratedSecurity>
        <ConnectString>Data Source=localhost;Initial Catalog=master</ConnectString>
        <DataProvider>SQL</DataProvider>
      </ConnectionProperties>
      <rd:DataSourceID>af7bc627-a9d4-48b5-8450-b391d1f45694</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <BottomMargin>1in</BottomMargin>
  <RightMargin>1in</RightMargin>
  <ReportParameters>
    <ReportParameter Name="param">
      <DataType>String</DataType>
      <Prompt>param</Prompt>
      <MultiValue>true</MultiValue>
    </ReportParameter>
  </ReportParameters>
  <rd:DrawGrid>true</rd:DrawGrid>
  <InteractiveWidth>8.5in</InteractiveWidth>
  <rd:SnapToGrid>true</rd:SnapToGrid>
  <Body>
    <ReportItems>
      <Textbox Name="id">
        <Left>0.25in</Left>
        <Top>0.25in</Top>
        <rd:DefaultName>id</rd:DefaultName>
        <Width>2.75in</Width>
        <Style>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingBottom>2pt</PaddingBottom>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
        </Style>
        <CanGrow>true</CanGrow>
        <Height>0.25in</Height>
        <Value>=First(Fields!id.Value)</Value>
      </Textbox>
    </ReportItems>
    <Height>2in</Height>
  </Body>
  <rd:ReportID>91734e2d-7c4a-440e-bae1-bb10602e368d</rd:ReportID>
  <LeftMargin>1in</LeftMargin>
  <DataSets>
    <DataSet Name="master">
      <Query>
        <CommandType>StoredProcedure</CommandType>
        <CommandText>airat_test</CommandText>
        <QueryParameters>
          <QueryParameter Name="@param">
            <Value>=Parameters!param.Value</Value>
          </QueryParameter>
        </QueryParameters>
        <DataSourceName>DataSource1</DataSourceName>
      </Query>
      <Fields>
        <Field Name="id">
          <rd:TypeName>System.String</rd:TypeName>
          <DataField>id</DataField>
        </Field>
      </Fields>
    </DataSet>
  </DataSets>
  <Width>6.5in</Width>
  <InteractiveHeight>11in</InteractiveHeight>
  <Language>en-US</Language>
  <TopMargin>1in</TopMargin>
</Report>
---
This posting is provided "AS IS" with no warranties, and confers no rights.
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33577304
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм...думаю не в varchar(100) дело.
скопипастил Ваш отчет и процедуру - та же ошибка :(
её удалось решить введением еще одного параметра отчета
parametr=join(Parameters!param.Value,", ")
но может как-нибудь без этих извратов можно?
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33585492
LevS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте уточнять - версии SQL Server'a, Report Server'a и т.д.
У меня все работает без ухищрений, на SQL 2005 RTM.

---
This posting is provided "AS IS" with no warranties, and confers no rights.
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33585982
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Microsoft SQL Server Developer Edition
Version: 9.00.1399.06
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33646972
Rose_Tree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. У меня таже проблема, мне надо использовать multi-value параметр в сохраненной процедуре. Я прочитала ваш диалог, но все же не поняла как это сделать..... опишите пожалуйста по-подробней... плз.....
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33647305
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть multivalue параметр отчета @parametr. Создается параметр отчета @parametr1 типа string, ему присваивается значение =join(Parameters!parametr.Value,", "), то есть значения параметра parametr разделенные через запятую. @parametr1 передается в процедуру, в который используется динамический SQL.
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33649296
Rose_Tree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И все же у меня не получается, не выдается никакой ошибки но и отбор не идет по параметру.... и еще 2 параметр, который я внесла для передачи в процедуру тоже выноситься на обозрение пользователю, можно ли его убрать?
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33649356
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А процедура как выглядит?

"и еще 2 параметр, который я внесла для передачи в процедуру тоже выноситься на обозрение пользователю, можно ли его убрать?"
- поставить в свойствах этого параметра галочку напротив hidden
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33650014
Rose_Tree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процедурка выглядит так:
CREATE PROCEDURE [dbo].[ERP_SaleAndReturn]
@Company char(3),
@StartDate dateTime,
@EndDate dateTime,
@Zones varchar
AS

CREATE TABLE #TmpSale
(
[Код заказа] CHAR(20),
[Вид операции] CHAR(6),
.....................
Сумма REAL,
Валюта CHAR(3)
)

INSERT #TmpSale
SELECT dbo.INVENTTRANS.TRANSREFID AS [Код заказа],
...........................................
FROM ......................................
WHERE (dbo.INVENTTRANS.TRANSTYPE = 0)
...............
AND (derivedtbl_2.Зона IN (@Zones) OR derivedtbl_2.Зона = '')
GROUP BY ...................

SELECT * FROM #TMPSale

DROP TABLE #TmpSale
GO
------------------------------------------------------------------------
надеюсь понятно..... параметр @Zones и есть интересующий меня параметр
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33651127
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо использовать динамический sql. Попробуй так:

CREATE PROCEDURE [dbo].[ERP_SaleAndReturn]
@Company char(3),
@StartDate dateTime,
@EndDate dateTime,
@Zones varchar(100)
AS
BEGIN
DECLARE @SQLString NVARCHAR(3000);
DECLARE @ParmDefinition NVARCHAR(1000);

SET @SQLString =
N'


CREATE TABLE #TmpSale
(
[Код заказа] CHAR(20),
[Вид операции] CHAR(6),
.....................
Сумма REAL,
Валюта CHAR(3)
)

INSERT #TmpSale
SELECT dbo.INVENTTRANS.TRANSREFID AS [Код заказа],
...........................................
FROM ......................................
WHERE (dbo.INVENTTRANS.TRANSTYPE = 0)
...............
AND (derivedtbl_2.Зона IN ('+@Zones+') OR derivedtbl_2.Зона = '''')
GROUP BY ...................

SELECT * FROM #TMPSale

DROP TABLE #TmpSale

'

SET @ParmDefinition = N'@Company char(3),@StartDate dateTime,@EndDate dateTime,@Zones varchar';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @Company char(3),@StartDate=@StartDate,@EndDate=@EndDate,@Zones=@Zones;

END;

Причем в тексте процедуры все кавычки удваиваются , т.е. вместо ' пишем ''
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #33651346
a!rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка вышла. Так надо:
CREATE PROCEDURE [dbo].[ERP_SaleAndReturn]
@Company char(3),
@StartDate dateTime,
@EndDate dateTime,
@Zones varchar(100)
AS
BEGIN
DECLARE @SQLString NVARCHAR(3000);
DECLARE @ParmDefinition NVARCHAR(1000);

SET @SQLString =
N'


CREATE TABLE #TmpSale
(
[Код заказа] CHAR(20),
[Вид операции] CHAR(6),
.....................
Сумма REAL,
Валюта CHAR(3)
)

INSERT #TmpSale
SELECT dbo.INVENTTRANS.TRANSREFID AS [Код заказа],
...........................................
FROM ......................................
WHERE (dbo.INVENTTRANS.TRANSTYPE = 0)
...............
AND (derivedtbl_2.Зона IN ('+@Zones+') OR derivedtbl_2.Зона = '''')
GROUP BY ...................

SELECT * FROM #TMPSale

DROP TABLE #TmpSale

'

SET @ParmDefinition = N'@Company char(3),@StartDate dateTime,@EndDate dateTime,@Zones varchar(100)';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @Company=@Company ,@StartDate=@StartDate,@EndDate=@EndDate,@Zones=@Zones;

END;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
[RS 2005] multi-value parametr & stored procedure
    #35419894
minya13_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и все таки как использовать multi value в хранимой процедуре?

ALTER PROCEDURE [dbo].[sssss]
@Проба int
AS
BEGIN
SELECT *
FROM
table
WHERE
(Jornal.proba in (''+@Проба+'')) и так пробывал (Jornal.proba in ('+@Проба+'))
END

Все равно выдает ошибку: Error converting data type nvarchar to int

Использую RS2005
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #35420157
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minya13_85 в последнем посте a!rat дан один из вариантов.
1. Использовать динамический sql
2. Использовать табличную функцию.
Ну и наконец, у Вас @Проба int а должно быть Varchar(n) зависит от того, сколь длинная у Вас строка.
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #35420385
minya13_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shady minya13_85 в последнем посте a!rat дан один из вариантов.
1. Использовать динамический sql
2. Использовать табличную функцию.
Ну и наконец, у Вас @Проба int а должно быть Varchar(n) зависит от того, сколь длинная у Вас строка. так строка у меня короткая всего 3 цифры: 585, 750, 925,950. А как мне использовать?
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #35420424
minya13_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shady minya13_85 в последнем посте a!rat дан один из вариантов.
1. Использовать динамический sql
2. Использовать табличную функцию.
Ну и наконец, у Вас @Проба int а должно быть Varchar(n) зависит от того, сколь длинная у Вас строка. Я бы сделал это просто запросом не используя процедуры, но я использую временную таблицу, и мне нужен обязательно параметр мульти на переменной! Как мне быть подскажите пожалуйста?!
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #35421561
zxc13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot minya13_85]и все таки как использовать multi value в хранимой процедуре?
Create FUNCTION [dbo].[MultiValue2Table]
(
@REGION VARCHAR(5000)
)
RETURNS
@outer TABLE
(
strin varCHAR(1000)
)
AS
BEGIN
DECLARE @I INT ,@pozi int,@pozf int

SET @I=0
Set @pozi=0
set @pozf=Charindex(',',@Region)
while @Region like'%,%'
begin
INSERT into @outer VALUES(substring(@Region,(@pozi),(@pozf)))
set @region=substring(@Region,(@pozf+1),(len(@Region)-(@pozf)))
set @pozi=0
set @Pozf=Charindex(',',@Region)

end
INSERT into @outer VALUES(@Region)
RETURN
END


ALTER PROCEDURE [dbo].[sssss]
@Проба int
AS
BEGIN
SELECT *
FROM
table
WHERE
(Jornal.proba in (select * from [dbo].[MultiValue2Table] (@Проба')))
END


Ia kakto tak delaiu....
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #35422213
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minya13_85 shady minya13_85 в последнем посте a!rat дан один из вариантов.
1. Использовать динамический sql
2. Использовать табличную функцию.
Ну и наконец, у Вас @Проба int а должно быть Varchar(n) зависит от того, сколь длинная у Вас строка. так строка у меня короткая всего 3 цифры: 585, 750, 925,950. А как мне использовать?
Понимаете, SQL Server 2005 не может принимать в качестве параметра массив или датасет. Поэтому что для вас 3 цифры, для sql server это строка. И Multi-Value параметр из отчета в хранимку передается как строка состоящая из символов.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
[RS 2005] multi-value parametr & stored procedure
    #36335770
minya13_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a!ratхм...думаю не в varchar(100) дело.
скопипастил Ваш отчет и процедуру - та же ошибка :(
её удалось решить введением еще одного параметра отчета
parametr=join(Parameters!param.Value,", ")
но может как-нибудь без этих извратов можно?
Всем здрасьте.. у меня та же самая проблема...Есть хранимая процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ALTER PROCEDURE [dbo].[Sklad]
	@StartDate datetime, @EndDate datetime,@Proba nvarchar( 50 )
AS
BEGIN
SET NOCOUNT ON;
SELECT 
jornal.Artikul, jornal.Proba,
sum(jornal.shtuk) as sht,
sum(jornal.ves) as ves
FROM jornal
where	jornal.dateout >= @StartDate and jornal.dateout <  @EndDate
and jornal.Proba in (select number from [dbo].[Proba_Vibor] (@Proba)) 
group by jornal.artikul,jornal.proba
END



В этой процедуре используется табличная функция [Proba_Vibor]

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
ALTER FUNCTION [dbo].[Proba_Vibor] (@Proba ntext)
RETURNS 
@tbl TABLE 
(listpos int IDENTITY( 1 ,  1 ) NOT NULL,number  int NOT NULL)
AS
BEGIN
	DECLARE @pos      int,
              @textpos  int,
              @chunklen smallint,
              @str      nvarchar( 4000 ),
              @tmpstr   nvarchar( 4000 ),
              @leftover nvarchar( 4000 )

      SET @textpos =  1 
      SET @leftover = ''
      WHILE @textpos <= datalength(@Proba) /  2 
      BEGIN
         SET @chunklen =  4000  - datalength(@leftover) /  2 
         SET @tmpstr = ltrim(@leftover + substring(@Proba, @textpos, @chunklen))
         SET @textpos = @textpos + @chunklen

         SET @pos = charindex(',', @tmpstr)
         WHILE @pos >  0 
         BEGIN
            SET @str = substring(@tmpstr,  1 , @pos -  1 )
            INSERT @tbl (number) VALUES(convert(int, @str))
            SET @tmpstr = ltrim(substring(@tmpstr, @pos +  1 , len(@tmpstr)))
            SET @pos = charindex(',', @tmpstr)
         END

         SET @leftover = @tmpstr
      END

      IF ltrim(rtrim(@leftover)) <> ''
         INSERT @tbl (number) VALUES(convert(int, @leftover))
	RETURN 
END


Версия SQL:
Код: plaintext
Microsoft SQL Server  2005  -  9 . 00 . 4035 . 00  (X64)   Nov  24   2008   16 : 17 : 31    Copyright (c)  1988 - 2005  Microsoft Corporation  Enterprise Edition ( 64 -bit) on Windows NT  5 . 2  (Build  3790 : Service Pack  2 ) 

В Reporting Services 2005. передаю эту процедуру.

Т.е. в command type Выбираю text И в датасете прописываю
Код: plaintext
EXEC sklad @StartDate, @EndDate, @Proba
и также передаю ей multi-value параметр типа string. выбираю несколько значений параметра и в превью мне также пишет:Must declare scalar variable "@Proba", когда выбираю один параметр, срабатывает...

А когда в command type выбираю: StoredProcedure и в датасете прописываю просто
Код: plaintext
Sklad
то при выборе нескольких значений всё срабатывает нормально..
Но тип StoredProcedure я не могу выбирать..т.к. у меня несколько процедур и они все исполняются по некоторому параметру..т.е. в датасете прописано:
Код: plaintext
1.
2.
3.
if @report= 0 
EXEC sklad @StartDate, @EndDate, @Proba
else EXEC Sklad_1 @StartDate, @EndDate, @Stone
Т.е. в одной и той же таблице выводятся разные данные, в зависимости от параметра @report.



Я так понял RS2005 по-разному трактует одну и ту же процедуру..когда прописываю Exec почему-то она не хочет есть табличную функцию мою, а когда выбираю тип процедура и прописываю просто Sklad, процедура срабатывает даже при выборе нескольких параметров. от чего это может зависеть?
...
Рейтинг: 0 / 0
[RS 2005] multi-value parametr & stored procedure
    #36335857
minya13_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снят..
Линк
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / [RS 2005] multi-value parametr & stored procedure
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]