Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 подскажите гдле я накасячил?  [new]
Imry
Member

Откуда: Санкт-Петербург
Сообщений: 51
CREATE PROCEDURE dbo.p_InfANet @RepID int
as

SET XACT_ABORT ON
SET NOCOUNT ON

declare repid_cur scroll cursor for --объявлние курсора
select reportid from dbo.item
open repid_cur --открытие курсора
fetch next from repid_cur into @repid

begin
insert into dbo.ot4et(

computer
,[date]
,OS
,[Service Park]
,IE
,DirectX
,CProc
,MatherBoard
,Chipset
,RAM
,BIOS
,Video
,Monitor
,Sound
,HDD
,CDROM
,IP
,MAC
,Adapter
)

SELECT

max(case when (IIcon = 46) AND (IID = 261) then IValue else null end),-- AS computer,
max(case when (IIcon = 64) AND (IID = 264) then IValue else null end), --AS 'Дата' ,
max(case when (IIcon = 38) AND (IID = 263) then IValue else null end), --AS OS ,
max(case when (IIcon = 40) AND (IID = 540) then IValue else null end), --AS ServicePark ,
max(case when (IIcon = 115) AND (IID = 564) then IValue else null end), --AS IE
max(case when (IIcon = 49) AND (IID = 566) then IValue else null end), --AS DirectX ,
max(case when (IIcon = 80) AND (IID = 517) then IValue else null end), --AS CProc ,
max(case when (IIcon = 42) AND (IID = 518) then IValue else null end), --AS MotherBoard ,
max(case when (IIcon = 27) AND (IID = 519) then IValue else null end), --AS ChipSet ,
max(case when (IIcon = 50) AND (IID = 520) then IValue else null end), --AS RAM ,
max(case when (IIcon = 27) AND (IID = 521) then IValue else null end),--AS BIOS ,
max(case when (IIcon = 6) AND (IID = 523) then IValue else null end), --AS Video ,
max(case when (IIcon = 6) AND (IID = 525) then IValue else null end), --AS Monitor ,
max(case when (IIcon = 24) AND (IID = 526) then IValue else null end), --AS Sound ,
max(case when (IIcon = 5) AND (IID = 528) then IValue else null end), --AS HDD ,
max(case when (IIcon = 2) AND (IID = 529) then IValue else null end), --AS CDROM ,
max(case when (IIcon = 18) AND (IID = 538) then IValue else null end), --AS IP ,
max(case when (IIcon = 18) AND (IID = 539) then IValue else null end), --AS MAC ,
max(case when (IIcon = 18) AND (IID = 534) then IValue else null end) --AS Adapter

FROM Item
WHERE (ReportID = @repid)


fetch next from repid_cur into @repid -- переход к следующей записи по курсору
end

close repid_cur -- закрытие курсора
deallocate repid_cur



SET XACT_ABORT OFF
SET NOCOUNT OFF


в итоге я получаю только 1 запись
а должен получать 2
похоже курсор некоректно отрабатывает
помогите советом

спасибо
6 фев 04, 12:33    [524166]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
CREATE PROCEDURE dbo.p_InfANet @RepID int
as

SET XACT_ABORT ON
SET NOCOUNT ON

declare repid_cur scroll cursor for --объявлние курсора
select reportid from dbo.item
open repid_cur --открытие курсора
fetch next from repid_cur into @repid

while @@fetch_status = 0 begin
insert into dbo.ot4et(

computer
,[date]
,OS
,[Service Park]
,IE
,DirectX
,CProc
,MatherBoard
,Chipset
,RAM
,BIOS
,Video
,Monitor
,Sound
,HDD
,CDROM
,IP
,MAC
,Adapter
)

SELECT

max(case when (IIcon = 46) AND (IID = 261) then IValue else null end),-- AS computer,
max(case when (IIcon = 64) AND (IID = 264) then IValue else null end), --AS 'Дата' ,
max(case when (IIcon = 38) AND (IID = 263) then IValue else null end), --AS OS ,
max(case when (IIcon = 40) AND (IID = 540) then IValue else null end), --AS ServicePark ,
max(case when (IIcon = 115) AND (IID = 564) then IValue else null end), --AS IE
max(case when (IIcon = 49) AND (IID = 566) then IValue else null end), --AS DirectX ,
max(case when (IIcon = 80) AND (IID = 517) then IValue else null end), --AS CProc ,
max(case when (IIcon = 42) AND (IID = 518) then IValue else null end), --AS MotherBoard ,
max(case when (IIcon = 27) AND (IID = 519) then IValue else null end), --AS ChipSet ,
max(case when (IIcon = 50) AND (IID = 520) then IValue else null end), --AS RAM ,
max(case when (IIcon = 27) AND (IID = 521) then IValue else null end),--AS BIOS ,
max(case when (IIcon = 6) AND (IID = 523) then IValue else null end), --AS Video ,
max(case when (IIcon = 6) AND (IID = 525) then IValue else null end), --AS Monitor ,
max(case when (IIcon = 24) AND (IID = 526) then IValue else null end), --AS Sound ,
max(case when (IIcon = 5) AND (IID = 528) then IValue else null end), --AS HDD ,
max(case when (IIcon = 2) AND (IID = 529) then IValue else null end), --AS CDROM ,
max(case when (IIcon = 18) AND (IID = 538) then IValue else null end), --AS IP ,
max(case when (IIcon = 18) AND (IID = 539) then IValue else null end), --AS MAC ,
max(case when (IIcon = 18) AND (IID = 534) then IValue else null end) --AS Adapter

FROM Item
WHERE (ReportID = @repid)


fetch next from repid_cur into @repid -- переход к следующей записи по курсору
end

close repid_cur -- закрытие курсора
deallocate repid_cur



SET XACT_ABORT OFF
SET NOCOUNT OFF



для спящего время бодрствования равносильно сну
6 фев 04, 12:36    [524175]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Glory
Member

Откуда:
Сообщений: 104760
похоже курсор некоректно отрабатывает

А где собственно цикл по курсору-то ?
6 фев 04, 12:37    [524178]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Imry
Member

Откуда: Санкт-Петербург
Сообщений: 51
c вот этим
while @@fetch_status = 0 begin

...

end

выдает 50 строк по 16 репорту (а должен только 1)
и 50 строк по 17 репорту (а должен токо 1)

в итоге он должен вывести 2 строки
(т е в таблице item есть rpeortid со значением 16
и со значенем 17)
6 фев 04, 12:42    [524193]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
declare repid_cur scroll cursor for --объявлние курсора 


select top 2 reportid from dbo.item


для спящего время бодрствования равносильно сну
6 фев 04, 12:44    [524199]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
declare repid_cur scroll cursor for --объявлние курсора 


select distinct reportid from dbo.item


для спящего время бодрствования равносильно сну
6 фев 04, 12:45    [524200]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Imry
Member

Откуда: Санкт-Петербург
Сообщений: 51
точно
всем громадное человеческое спасибо
добавил distinct и все завелось:)
6 фев 04, 12:51    [524215]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Зачем здесь курсор ???
SELECT ReportID,

max(case when (IIcon = 46) AND (IID = 261) then IValue else null end),-- AS computer,

max(case when (IIcon = 64) AND (IID = 264) then IValue else null end), --AS %af_src_str_0 ,

max(case when (IIcon = 38) AND (IID = 263) then IValue else null end), --AS OS ,

max(case when (IIcon = 40) AND (IID = 540) then IValue else null end), --AS ServicePark ,

max(case when (IIcon = 115) AND (IID = 564) then IValue else null end), --AS IE

max(case when (IIcon = 49) AND (IID = 566) then IValue else null end), --AS DirectX ,

max(case when (IIcon = 80) AND (IID = 517) then IValue else null end), --AS CProc ,

max(case when (IIcon = 42) AND (IID = 518) then IValue else null end), --AS MotherBoard ,

max(case when (IIcon = 27) AND (IID = 519) then IValue else null end), --AS ChipSet ,

max(case when (IIcon = 50) AND (IID = 520) then IValue else null end), --AS RAM ,

max(case when (IIcon = 27) AND (IID = 521) then IValue else null end),--AS BIOS ,

max(case when (IIcon = 6) AND (IID = 523) then IValue else null end), --AS Video ,

max(case when (IIcon = 6) AND (IID = 525) then IValue else null end), --AS Monitor ,

max(case when (IIcon = 24) AND (IID = 526) then IValue else null end), --AS Sound ,

max(case when (IIcon = 5) AND (IID = 528) then IValue else null end), --AS HDD ,

max(case when (IIcon = 2) AND (IID = 529) then IValue else null end), --AS CDROM ,

max(case when (IIcon = 18) AND (IID = 538) then IValue else null end), --AS IP ,

max(case when (IIcon = 18) AND (IID = 539) then IValue else null end), --AS MAC ,

max(case when (IIcon = 18) AND (IID = 534) then IValue else null end) --AS Adapter

FROM Item
GROUP BY ReportID
6 фев 04, 12:56    [524225]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
в плане зачем?? чтоп данные вывести... :) или я детальку упустил... :)

для спящего время бодрствования равносильно сну
6 фев 04, 13:02    [524237]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Glory
Member

Откуда:
Сообщений: 104760
или я детальку упустил... :)

Курсор по таблице чтобы сделать запрос по этой же таблицы ???
6 фев 04, 13:06    [524255]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
ООО... не заметил :)
видимо испужалси что запросик большой получится :)


для спящего время бодрствования равносильно сну
6 фев 04, 13:08    [524270]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
хотя... там вроде с группировками будут проблемы...
так шта в 1 запросе просто так не получится...

для спящего время бодрствования равносильно сну
6 фев 04, 13:11    [524278]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Glory
Member

Откуда:
Сообщений: 104760
хотя... там вроде с группировками будут проблемы...
Какие например ? Если учитывать, что группировка есть и в запросе с курсором
6 фев 04, 13:13    [524284]     Ответить | Цитировать Сообщить модератору
 Re: подскажите гдле я накасячил?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
если так прокатит
select reportid, max(case field1 when 1 then field2 else null end)... 

from tablename group by reportid

то кажись я загналси... :)

для спящего время бодрствования равносильно сну
6 фев 04, 13:19    [524310]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить