powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Курсоры в RS2005
1 сообщений из 1, страница 1 из 1
Курсоры в RS2005
    #35326074
minya13_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть хранимая процедура, в ней используются курсоры. Делаю отчет в RS2005, вызываю процедуру. Пишет ошибку: "Процедура или функция ожидает параметр @Начальная_дата", который не был предоставлен.
Хотя в процедуре эта переменная объявлена? Может я что-то не так делаю?
Вот код моей хранимой процедуры:


ALTER PROCEDURE [dbo].[zMarketing_23_CrossTAb] @Начальная_дата datetime, @Конечная_дата datetime, @Склад nvarchar(20), @Металл nvarchar(10),@Проба Int='',@Выражение nvarchar(20)='Вес'
AS
SET NOCOUNT ON
DECLARE @Man TABLE (cod int identity (1,1), man nvarchar(30))

INSERT INTO @Man (man)
SELECT REPLACE(REPLACE(REPLACE(REPLACE(departIn, '.', '_'), '1', ''), '(', ''), ')', '')
FROM mainex.dbo.docs docs INNER JOIN
mainex.dbo.docsPl docsPl ON docs.docID = docsPl.docID INNER JOIN
mainex.dbo.docsDate docsDate ON docsPl.docID = docsDate.docID INNER JOIN
mainex.dbo.Jornal Jornal ON docsDate.docID = Jornal.docID LEFT JOIN
attrib.dbo.artikuls artikuls on jornal.artikul=artikuls.artikul and jornal.proba=artikuls.proba LEFT JOIN
attrib.dbo.proizvoditel proizvoditel on artikuls.proizvid=proizvoditel.id
WHERE isnull(deleted,0)=0 and isnull(aktivity,1)=1 and proizvid<>1 and doctype='накладные' and
(subjecttype='Менеджеры' or departin='розничная торговля') and category<>'БМ.ВОЗВРАТ'
and docexecutedate>=@Начальная_дата and DATEDIFF(DAY,@Конечная_дата, docexecutedate)<=0
and ((@Склад='Бриллианты' AND skladout in ('Склад4','ДЕМЗАЛ')) OR (@Склад='Не бриллианты' and skladout in ('Склад10','ДЕМЗАЛ10')))
and docs.metall=@Металл and (docs.proba=@Проба or @Проба='')
GROUP BY REPLACE(REPLACE(REPLACE(REPLACE(departIn, '.', '_'), '1', ''), '(', ''), ')', '')
ORDER BY REPLACE(REPLACE(REPLACE(REPLACE(departIn, '.', '_'), '1', ''), '(', ''), ')', '')

DECLARE ManCursor CURSOR for
Select QUOTENAME(man) from @Man
order by man
declare @m1 nvarchar(1000),
@m2 nvarchar(1000)

OPEN manCursor

FETCH NEXT FROM ManCursor into @m1
while (@@FETCH_STATUS<>-1)
BEGIN
IF @m2 is null Or @m2=''
BEGIN
SET @m2=@m1+' int,'
END
ELSE
BEGIN
SET @m2=@m2+@m1+' int,'
END
FETCH NEXT FROM manCursor into @m1
END

CLOSE mancursor
DEALLOCATE mancursor


DECLARE @Create varchar(4000)

SET @Create='
if exists (select table_name from information_schema.tables where table_name = N'+char(39)+'Tab_'+char(39)+')
BEGIN
print '+char(39)+'Перезапустите пожалуйста программу!'+char(39)+'
return
END
ELSE
BEGIN
CReate table dbo.TAb_
(numb int identity(1,1), firma nvarchar(100), '+@m2+' Итог Int)
END'

EXECUTE (@Create)

SELECT * INTO #tab FROM Tab_
DROP TABLE Tab_

INSERT INTO #TAb (firma)
SELECT proizvoditel.proizvoditel
FROM mainex.dbo.docs docs INNER JOIN
mainex.dbo.docsPl docsPl ON docs.docID = docsPl.docID INNER JOIN
mainex.dbo.docsDate docsDate ON docsPl.docID = docsDate.docID INNER JOIN
mainex.dbo.Jornal Jornal ON docsDate.docID = Jornal.docID LEFT JOIN
attrib.dbo.artikuls artikuls on jornal.artikul=artikuls.artikul and jornal.proba=artikuls.proba LEFT JOIN
attrib.dbo.proizvoditel proizvoditel on artikuls.proizvid=proizvoditel.id
WHERE isnull(deleted,0)=0 and isnull(aktivity,1)=1 and proizvid<>1 and doctype='накладные' and
(subjecttype='Менеджеры' or departin='розничная торговля') and category<>'БМ.ВОЗВРАТ'
and docexecutedate>=@Начальная_дата and DATEDIFF(DAY,@Конечная_дата,docexecutedate)<=0
and ((@Склад='Бриллианты' AND skladout in ('Склад4','ДЕМЗАЛ')) OR (@Склад='Не бриллианты' and skladout in ('Склад10','ДЕМЗАЛ10')))
and docs.metall=@Металл and (docs.proba=@Проба or @Проба ='')
GROUP BY proizvoditel.proizvoditel
ORDER BY proizvoditel.proizvoditel


SELECT REPLACE(REPLACE(REPLACE(REPLACE(departIn, '.', '_'), '1', ''), '(', ''), ')', '') departin, proizvoditel, SUM(case when @Выражение='Количество' then shtuk when @Выражение='Стоимость' then price else ves end) as expr
INTO #otgrdaval
from k_OtgrDaval(@Начальная_дата,@Конечная_дата,@Склад,@Металл,@Проба)
Group By REPLACE(REPLACE(REPLACE(REPLACE(departIn, '.', '_'), '1', ''), '(', ''), ')', '') , proizvoditel


Declare @numb int,
@firma nvarchar(100)
SET @numb=0

WHILE @numb<(select max(numb) from #Tab)
BEGIN
SET @numb=@numb+1
SET @Firma=(select firma from #Tab where numb=@numb)

Declare @cod int,
@departin nvarchar(30)
SET @cod=0
WHILE @cod<(select max(cod) from @man)
BEGIN
SET @cod=@cod+1
SET @departin=(select man from @man where cod=@cod)

DECLARE @Update varchar(8000)
SET @Update='
update #Tab
set '+QUOTENAME(@departin)+'=(select isnull(expr,0) from #otgrdaval
where departin='+char(39)+@departin+char(39)+' and proizvoditel='+char(39)+@firma+char(39)+')
where firma='+char(39)+@firma+char(39)+' '
EXECUTE (@update)

END
DECLARE @Total nvarchar(4000)
SET @TOTAL='
update #Tab
set Итог=(select isnull(sum(expr),0) from #otgrdaval
where proizvoditel='+char(39)+@firma+char(39)+')
where firma='+char(39)+@firma+char(39)+''

EXECUTE (@total)
END
DEclare @col int,
@manname nvarchar(30)
set @col=0

WHILE @col<(select max(cod) from @man)
BEGIN
SET @col=@col+1
SET @manName=(select man from @man where cod=@col)
print @manname

DECLARE @upd nvarchar(4000)
SET @upd='update #tab set '+quotename(@manname)+'=0 where '+quotename(@manname)+' is null'
EXEC(@upd)
END

Declare @SQL nvarchar(4000)
SET @SQL='SELECT firma as Поставщик,'+REPLACE(@m2,'int','')+' Итог from #tab order by numb'

EXECUTE (@sql)


SET NOCOUNT OFF

Вызываю процедуру exec dbo.zMarketing_23_CrossTAb
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Курсоры в RS2005
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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