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

Откуда:
Сообщений: 101
Здравствуйте. Ошибка в последней строке возле InsertCursor. Не могу понять из-за чего... Не уверена в правильности условия. подскажите пожалуйста.
create procedure SP_Assemble_PC
as
DECLARE @SystemBoard int, @CPU int, @RAM int, @HDD int, @VGA int, @Case int, @Power_Module int     
Declare  InsertCursor   Cursor For 
Select SystemBoard, CPU, RAM, HDD,    VGA,      [Case], Power_Module
From Assemble_PC
  OPEN InsertCursor
 Fetch next  FROM         InsertCursor
INTO            @SystemBoard, @CPU, @RAM, @HDD, @VGA, @Case, @Power_Module WHILE (@@Fetch_Status = 0) BEGIN
 IF (@SystemBoard <> NULL) 
                      BEGIN
                          if (@SystemBoard<>NULL)
begin

       INSERT INTO dbo.Basket
                      (info, Price1, ID_old, [table],DateOfCustom)
SELECT     ISNULL(s.Manufacturer, '') + '  ' + ISNULL(s.Model, '') + ' LGA' + ISNULL(ss.Socket, '') + ' ' + ISNULL(s.Chipset, '') + ' SATA' + ISNULL(CONVERT(varchar(5), s.SATA ), '') 
                      + '  ' + ISNULL(st.SATA_Type, '') + '  PATA' + ISNULL( CONVERT(varchar(5), s.PATA ), '') + '  ' + ISNULL(Rt.RAM_Type, '') + '  ' + ISNULL(ff.FormFactor, '') , 
                      s.Price, s.ID, '[SystemBoard]' ,getdate()
FROM         dbo.SystemBoard s INNER JOIN
                      dbo.Socket_Type ss ON s.Socket = ss.ID INNER JOIN
                      dbo.SATA_Type st ON s.SATA_Type = st.ID INNER JOIN
                      dbo.RAM_Type Rt ON s.RAM_Type = Rt.ID INNER JOIN
                      dbo.FormFactor ff ON s.FormFactor = ff.ID
Where s.ID=@SystemBoard
end
if (@CPU<>NULL)
begin
INSERT INTO dbo.Basket
                      (info, Price1, ID_old, [table],DateOfCustom)
SELECT     ISNULL(cp.Manufacturer, '') + '  ' + ISNULL(cp.Model, '') + ' ' + ISNULL(ss.Socket, '') + ' ' + ISNULL(cp.CPU_Clock, '') + ' ' + ISNULL(cp.FSB_Clock, '') 
                     , cp.Price, cp.ID, '[CPU]' ,getdate()
FROM         dbo.CPU cp 
INNER JOIN    dbo.Socket_Type ss ON cp.Socket = ss.ID
Where cp.ID=@CPU
end
if (@RAM<>NULL)
begin
INSERT INTO dbo.Basket
                      (info, Price1, ID_old, [table],DateOfCustom)
SELECT     ISNULL(r.Manufacturer, '') + '  ' + ISNULL(r.Model, '') + ' ' + ISNULL(r.Kit, '') + ' ' + ISNULL(Rt.RAM_Type, '') + ' ' + ISNULL(r.Clock, '') 
                      + ' ' + ISNULL(r.Timings, '') , r.Price, r.ID, '[RAM]',getdate()
FROM         dbo.RAM r INNER JOIN
                      dbo.RAM_Type Rt ON r.RAM_Type = Rt.ID
Where r.ID=@RAM
end
if(@HDD<>NULL)
begin
 INSERT INTO dbo.Basket
                      (info, Price1, ID_old, [table], DateOfCustom)
SELECT     ISNULL(h.Manufacturer, '') + '  ' + ISNULL(h.Model, '') + ' ' + ISNULL(cpc.Capacity, '') + ' ' + ISNULL(cc.Cache, '') + ' ' + ISNULL(rp.RPM, '') 
                      + ' ' + ISNULL(st.SATA_Type, '') , h.Price, h.ID, '[HDD]' ,getdate()
FROM         dbo.HDD h INNER JOIN
                      dbo.Capacity_Type cpc ON h.Capacity = cpc.ID INNER JOIN
                      dbo.Cache_Type cc ON h.Cache = cc.ID INNER JOIN
                      dbo.RPM_Type rp ON h.RPM = rp.ID INNER JOIN
                      dbo.SATA_Type st ON h.SATA_Type = st.ID
                                                               
Where h.ID=@HDD
end
If (@VGA<>NULL)
begin
    INSERT INTO dbo.Basket
                      (info, Price1, ID_old, [table],DateOfCustom)
SELECT     ISNULL(Manufacturer, '') + '  ' + ISNULL(Model, '') , Price, ID, '[VGA]' ,getdate()
FROM         dbo.VGA v 
Where      v.ID=@VGA
end
If (@Case<>NULL)
begin
 INSERT INTO dbo.Basket
                      (info, Price1, ID_old, [table],DateOfCustom)
SELECT     ISNULL(c.Manufacturer, '') + '  ' + ISNULL(c.Model, '') + ' ' + ISNULL(ct.Type, '') + ' ' + ISNULL(ff.FormFactor, '') + ' ' + ISNULL(c.Power_Module, '') 
                   , c.Price, c.ID, '[Case]', getdate()
FROM         dbo.[Case] c INNER JOIN
                      dbo.Case_Type ct ON c.Type = ct.ID INNER JOIN
                      dbo.FormFactor ff ON c.FormFactor = ff.ID 
Where c.ID=@Case
end
if (@Power_Module<>NULL)
begin
 INSERT INTO dbo.Basket
                      (info, Price1, ID_old, [table],DateOfCustom)
SELECT     ISNULL(Manufacturer, '') + '  ' + ISNULL(Model, '') + ' ' + ISNULL(convert(varchar(5),[Power]), '') + ' PATA' + ISNULL(convert(varchar(5),PATA), '') + ' SATA' + ISNULL(convert (varchar(5),SATA), '') 
                      + ' ' , Price, ID, 'Power_Module' ,getdate()
FROM         dbo.Power_Module pw
Where pw.ID=@Power_Module
end
end
close InsertCursor
deallocate InsertCursor
14 июн 11, 09:11    [10808197]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура с использованием курсора  [new]
П-Л
Guest
Процедуру кто будет ендом закрывать ?
14 июн 11, 09:21    [10808219]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура с использованием курсора  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
П-Л
Процедуру кто будет ендом закрывать ?
Процедуры не надо закрывать ендами

Proggirl
Не могу понять из-за чего...
Думаю, надо прочитать текст ошибки.
14 июн 11, 09:27    [10808233]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура с использованием курсора  [new]
Proggirl
Member

Откуда:
Сообщений: 101
спасибо. Глупая ошибка, но я б ее сама сейчас не заметила.
14 июн 11, 09:28    [10808236]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура с использованием курсора  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Proggirl
Не могу понять из-за чего...
Вам нужно научиться правильно текст форматировать.

Из за кривого стиля вы не замечаете, что 2 раза скопировали текст:
IF (@SystemBoard <> NULL)
BEGIN
if (@SystemBoard<>NULL)
begin
14 июн 11, 09:30    [10808240]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура с использованием курсора  [new]
П-Л
Guest
Имелос в виду что одного енда не хваталало. Лишний бегин убрать = енд добавить. Из-за неряшливого форматирования разбираться в текте не хотелось.
14 июн 11, 09:33    [10808246]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура с использованием курсора  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Proggirl,

как думаете, какой результат всегда будет давать
@CPU<>NULL
при SET ANSI_NULLS ON (обычно так по-умолчанию)?
Сравнивать с NULL надо операторами IS NULL и IS NOT NULL
14 июн 11, 12:33    [10809345]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура с использованием курсора  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3755
dbo.Capacity_Type
dbo.Cache_Type
dbo.RPM_Type
dbo.SATA_Type

о,да.....
14 июн 11, 14:59    [10810766]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить