Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Курсоры в RS2005
|
|||
|---|---|---|---|
|
#18+
Есть хранимая процедура, в ней используются курсоры. Делаю отчет в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2008, 14:13 |
|
||
|
|

start [/forum/topic.php?fid=31&fpage=108&tid=1537019]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 69ms |
| total: | 190ms |

| 0 / 0 |
