|
|
|
Проблема с курсором
|
|||
|---|---|---|---|
|
#18+
Вопрос такой у меня есть клиент написанный на Crystal Report и соответственно сервер MSSQL2000/ При объявлении курсора: Declare cr_Summ_Count CURSOR Local Scroll FOR Select TagIndex From General Order By TagIndex используется Select, есди в аналайзере запустить этот скрипт, то этот Select отработает, выдаст первую строку, почему? Когда обработанные данные я подставляю в Crystal Report у меня в отчет выводится не результирующий Select, а первый из курсора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2002, 04:34:11 |
|
||
|
Проблема с курсором
|
|||
|---|---|---|---|
|
#18+
Не могли бы вы привести полный скрипт или обьясните, что делает курсор и какие данные возвращаются для репорта ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2002, 06:14:33 |
|
||
|
Проблема с курсором
|
|||
|---|---|---|---|
|
#18+
Вот полный текст: CREATE PROCEDURE [sp_Summ_Count] AS Declare @TagIndex smallint, @@Total1 float, @Total float, @Fetch smallint Truncate Table tb_Total_Hour ----------------------------------------------------- Exec sp_Summ --За смену SET NOCOUNT ON Declare cr_Summ_Count CURSOR Local Scroll FOR Select TagIndex From General Order By TagIndex OPEN cr_Summ_Count FETCH FIRST FROM cr_Summ_Count INTO @TagIndex Set @Fetch = 0 WHILE @Fetch = 0 Begin Set @Total = 0 Set @@Total1 = 0 exec sp_Summ_Smena_Count @TagIndex, @@Total1 Output Set @Total = @Total + @@Total1 Insert tb_Total_Hour (TagIndex, Smena) Values (@TagIndex, @Total) FETCH NEXT FROM cr_Summ_Count INTO @TagIndex Set @Fetch = @@FETCH_STATUS End -- Select * from #tb_Smena_Total CLOSE cr_Summ_Count DEALLOCATE cr_Summ_Count ----------------------------------------------------- --За сутки Declare cr_Summ_Count CURSOR Local Scroll FOR Select TagIndex From General Order By TagIndex OPEN cr_Summ_Count FETCH FIRST FROM cr_Summ_Count INTO @TagIndex Set @Fetch = 0 WHILE @Fetch = 0 Begin --Set @Total = 0 --Set @@Total1 = 0 exec sp_Summ_Day_Count @TagIndex, @@Total1 Output --Set @Total = @Total + @@Total1 UPDATE tb_Total_Hour SET [Day] = @@Total1 WHERE [TagIndex] = @TagIndex FETCH NEXT FROM cr_Summ_Count INTO @TagIndex Set @Fetch = @@FETCH_STATUS End --Select * from ##tb_Smena_Total CLOSE cr_Summ_Count DEALLOCATE cr_Summ_Count ----------------------------------------------------- --За месяц Declare cr_Summ_Count CURSOR Local Scroll FOR Select TagIndex From General Order By TagIndex OPEN cr_Summ_Count FETCH FIRST FROM cr_Summ_Count INTO @TagIndex Set @Fetch = 0 WHILE @Fetch = 0 Begin Set @Total = 0 Set @@Total1 = 0 exec sp_Summ_Month_Count @TagIndex, @@Total1 Output Set @Total = @Total + @@Total1 UPDATE tb_Total_Hour SET [Month] = @Total WHERE [TagIndex] = @TagIndex FETCH NEXT FROM cr_Summ_Count INTO @TagIndex Set @Fetch = @@FETCH_STATUS End CLOSE cr_Summ_Count DEALLOCATE cr_Summ_Count Select * from tb_Total_Hour SELECT dbo.Tag.Description, tb_Total_Hour.* FROM tb_Total_Hour INNER JOIN dbo.General ON tb_Total_Hour.TagIndex = dbo.General.TagIndex INNER JOIN dbo.Tag ON dbo.General.TagName = dbo.Tag.Name Order By tb_Total_Hour.TagIndex GO --------- Мне нужно обработать по некой формуле все строчки из таблицы. А точнее: таблица состоит из: CREATE TABLE [dbo].[CountHour] ( [Dateandtime] [datetime] NULL , [TagIndex] [smallint] NOT NULL , [Val] [float] NULL ) ON [PRIMARY] Сама формула: (DATEANDTIMEn+1 - DATEANDTIMEn)*(VALn + VALn+1) / 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2002, 06:55:30 |
|
||
|
Проблема с курсором
|
|||
|---|---|---|---|
|
#18+
Сложно честно говоря не зная, что делают многочисленные вызовы процедур в курсорах понять логику не зная постановки. Что заметил - в процедуре не стоит SET NOCOUNT OFF и SET XACT_ABORT OFF, не стоит обработка возникновения ошибок после вызовов ХП, в конце возвращаются 2 select-а, честно говоря не знаю, в Cristal Report есть возможность получать одновременно с запроса несколько наборов данных (как в АДО) ? Заодно проверьте, что в вызываемых процедурах никто select-ом не возвращает данных, так как они тоже к клиенту попадут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2002, 13:56:03 |
|
||
|
Проблема с курсором
|
|||
|---|---|---|---|
|
#18+
Сама формула: (DATEANDTIMEn+1 - DATEANDTIMEn)*(VALn + VALn+1) / 2 А n и n+1 означают текущая и следующая запись что-ли ? Если бы у таблицы был первичный ключ, то можно было бы сделать в одном запросе. Хотя и без него можно попробовать \nCREATE TABLE #CountHour ([Dateandtime] [datetime] NULL , [TagIndex] [smallint] NOT NULL , [Val] [float] NULL ) insert #CountHour values('20020501', 1, 10.5) insert #CountHour values('20020501 09:30:00', 1, 5.5) insert #CountHour values('20020501 09:35:00', 1, 15.5) insert #CountHour values('20020501 15:44:00', 1, 5.5) insert #CountHour values('20020501 12:12:00', 2, 5.5) insert #CountHour values('20020501 13:12:00', 2, 45.5) select a.Dateandtime AS a_Dateandtime, a.Val AS a_Val, b.Dateandtime AS b_Dateandtime, b.val AS b_Val, DATEDIFF(hh, a.Dateandtime, b.Dateandtime)*(a.Val+b.Val)/2 from (select a.tagindex, a.Dateandtime, a.Val, (select top 1 b.Dateandtime from #CountHour b where b.tagindex = a.tagindex and b.Dateandtime > a.Dateandtime order by b.Dateandtime asc) as b_Dateandtime from #CountHour a) AS a left outer join #CountHour b on b.tagindex = a.tagindex and b.Dateandtime = a.b_Dateandtime drop table #CountHour ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2002, 15:30:33 |
|
||
|
Проблема с курсором
|
|||
|---|---|---|---|
|
#18+
Спасибо за пример Glory. Все получилось. А вообще можно както блокировать ненужные select из курсоров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2002, 06:44:37 |
|
||
|
Проблема с курсором
|
|||
|---|---|---|---|
|
#18+
А может кто подскажет как решить лучше такую задачу. Есть таблица: CREATE TABLE [dbo].[Count] ( [DateAndTime] [datetime] NULL , [TagIndex] [smallint] NOT NULL , [Val] [float] NULL ) ON [PRIMARY] Мне нужно подсчитать по формуле: Total = Total + (DATEANDTIMEn+1 - DATEANDTIMEn)*(VALn + VALn+1) / 2, по каждому TagIndex и разбить по времени. Что бы получилась таблица типа: CREATE TABLE [dbo].[tb_CountHour] ( [TagIndex] [smallint] NOT NULL , [Smena] [float] NULL , [Day] [float] NULL , [Month] [float] NULL ) ON [PRIMARY] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2002, 07:04:17 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32031378&tid=1822569]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 351ms |

| 0 / 0 |
