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

Откуда: Москва
Сообщений: 68
Помогите плизз настоящей блондинке)))
Все нет больше сил, он мне все время пишет ошибку что ему не нравиться синтаксис перед else (((
Смысл моей процедурки, что если при условии tr.state <> 60 то цены и цифры должны переводиться в евро, а вот если равно = 60, то тогда переводиться в доллары.
но тут все не так просто, и что бы связать все эти таблицы hotel связвна с toun, а toun уже в свою очередь со state:
25 июн 09, 11:41    [7341831]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Glory
Member

Откуда:
Сообщений: 104760
Блондинки в состоянии выполнить п.4 и п.6 из https://www.sql.ru/forum/actualthread.aspx?tid=127456 ?
25 июн 09, 11:44    [7341851]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Очаровательная блондинка, вы хоть скрипт процедуры приведите,а то угадать что у вас написано перед else очень проблематично. Мы коненчо постраемся вам помоч,но увы, читать мысли или код с чужого монитора котрого не видно - мы не в силах.
-------------------------------------
Jedem Das Seine
25 июн 09, 12:10    [7342036]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
quazare
Member

Откуда: Новосибирск
Сообщений: 480
код в студию
25 июн 09, 13:57    [7342904]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
типа мимо проходил
Guest
Zvez_DA,

Ткну пальцем в небо -
if тра та та та
BEGIN

творю че хочу

END
else

может так надо было?
25 июн 09, 14:51    [7343358]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
Вообщем я тут что то намудрила и у меня получилось, что теперь он мне пишет:

"Msg 156, Level 15, State 1, Procedure lab_internet_hotel_price, Line 61
Incorrect syntax near the keyword 'if'.
Msg 102, Level 15, State 1, Procedure lab_internet_hotel_price, Line 182
Incorrect syntax near '@tour'."

А код как-то так выглядит:
	@hot int, @dg smalldatetime
as

declare @dog int
declare @com float
declare @sea int
declare @tour int
declare @inc int

select @dog = Datepart(yyyy, @dg)
select @sea = 0


select @com = (select commission
from season
where (tour = @tour)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonbeg/256) as varchar) + '/' + Cast((seasonbeg-seasonbeg/256*256) as varchar)) as smalldatetime) <= @dg)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonend/256) as varchar) + '/' + Cast((seasonend-seasonend/256*256) as varchar)) as smalldatetime) >= @dg))

select @sea = (select inc
from season
where (tour = @tour)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonbeg/256) as varchar) + '/' + Cast((seasonbeg-seasonbeg/256*256) as varchar)) as smalldatetime) <= @dg)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonend/256) as varchar) + '/' + Cast((seasonend-seasonend/256*256) as varchar)) as smalldatetime) >= @dg))

if ((select Count(*) from Cservice where (season = @sea) and (hotel = @hot)) > 0)
	select @com = (select commission from Cservice where (season = @sea) and (hotel = @hot))

if (@com is null)
	select @com = 0

if (@com <> 0)
	select @com = (1 + (@com/100))


CREATE TABLE [#hpd]([inc] [int] IDENTITY(1,1) NOT NULL,
	[hname] [varchar] (250) NULL,
	[rname] [varchar] (250) NULL,
	[pname] [varchar] (250) NULL,
	[mname] [varchar] (100) NULL,
	[begdate] [smalldatetime] NULL,
	[enddate] [smalldatetime] NULL,
	[price] [float] NULL,
	[toprice] [float] NULL,
	[netprice] [float] NULL,
	[eprice] [float] NULL,
	[rprice] [float] NULL,
	[ecur] [int] NULL,
	[rcur] [int] NULL,
	[ecname] [varchar] (20) NULL,
	[rcname] [varchar] (20) NULL,
    [sort] [int] NULL) 

insert into [#hpd]([hname], [rname], [pname], [mname], [begdate], [enddate], [price],
	[toprice], [netprice], [ecur], [rcur], [ecname], [rcname], [sort])

if  @tour = (select tr.inc
from hotel h
	inner join [town] t on (t.inc = h.town)
	inner join [tour] tr on (tr.state = t.state) and (tr.tourtype = 59) and (tr.state <> 60)
where h.inc = @hot)

begin

select h.[name], hr.[name], hc.[name], hm.[name],hp.datebeg, hp.dateend, ht.price,
	ht.cnet*@com, ht.net*@com, ht.currency, 1, 'EUR', 'RUB', hr.sort 
from hotel h
	left join hotelpr hp on (hp.hotel = h.inc)
	inner join htpartpr ht on (ht.hotelpr = hp.inc)
--	inner join currate cr on (cr.currency = ht.currency)
	inner join htplace hc on (hc.inc = hp.htplace)
	inner join room hr on (hr.inc = hp.room) 
	inner join meal hm on (hm.inc = hp.meal)
where (h.inc = @hot) and (hp.datebeg <= @dg) and (hp.dateend >= @dg) and (hp.spos < 0)and (hr.sort >-1)


declare @cur int
declare @ecur int
declare @rate float
declare @bankrate float
declare @units float
declare @erate float
declare @ebankrate float
declare @eunits float
declare @edate smalldatetime
declare @price float
declare @toprice float
declare @netprice float


select @cur = -1
select @rate = -1
select @bankrate = -1
select @units = -1
select @ecur = 3
select @edate = (select Max(tdate) from currate where (currency = @ecur) and (tdate <= GetDate()))
select @erate = (select rate from currate where (currency = @ecur) and (tdate = @edate))
select @ebankrate = (select bankrate from currate where (currency = @ecur) and (tdate = @edate))
select @eunits = (select units from currate where (currency = @ecur) and (tdate = @edate))


 
declare hpd_cursor cursor for
select [inc], price, toprice, netprice, ecur--, sort
from [dbo].[#hpd]

OPEN hpd_cursor

FETCH NEXT FROM hpd_cursor
INTO @inc, @price, @toprice, @netprice, @ecur--, @sort

WHILE @@FETCH_STATUS = 0
BEGIN

	if ((@price <> 0) or (@price <> Null))
	begin
	update #hpd
	set [eprice] = [price]
	where inc = @inc
	end
	else
	begin
		if ((@toprice <> 0) or (@toprice <> Null))
		begin
		update #hpd
		set [eprice] = [toprice]
		where inc = @inc
		end
		else
		begin
		update #hpd
		set [eprice] = [netprice]
		where inc = @inc
		end
	end

	if (@ecur = 1)
	begin
		update #hpd
		set [rprice] = [eprice]
		where inc = @inc
		update #hpd
		set [eprice] = CEILING([eprice]/@ebankrate*@eunits), [rprice] = ROUND([rprice], -1), ecur = 3
		where inc = @inc
	end
	else
	begin
		if (@ecur = 3)
		begin
			update #hpd
			set [eprice] = CEILING([eprice]), [rprice] = ROUND([eprice]*@ebankrate/@eunits, -1)
			where inc = @inc
		end
		else
		begin
			if (@ecur <> @cur)
			begin
				select @cur = @ecur
				select @edate = (select Max(tdate) from currate where (currency = @cur) and (tdate <= GetDate()))
				select @rate = (select rate from currate where (currency = @cur) and (tdate = @edate))
				select @bankrate = (select bankrate from currate where (currency = @cur) and (tdate = @edate))
				select @units = (select units from currate where (currency = @cur) and (tdate = @edate))
			end
			update #hpd
			set [eprice] = CEILING([eprice]*@bankrate/@units/@ebankrate*@eunits), [rprice] = ROUND([eprice]*@bankrate/@units, -1), ecur = 3
			where inc = @inc
		end

	end
	FETCH NEXT FROM hpd_cursor
	INTO @inc, @price, @toprice, @netprice, @ecur
END

CLOSE hpd_cursor
DEALLOCATE hpd_cursor
end

else @tour = (select tr.inc
from hotel h
	inner join [town] t on (t.inc = h.town)
	inner join [tour] tr on (tr.state = t.state) and (tr.tourtype = 59) and tr.state = 60

where h.inc = @hot)

begin
select h.[name], hr.[name], hc.[name], hm.[name],hp.datebeg, hp.dateend, ht.price,
	ht.cnet*@com, ht.net*@com, ht.currency, 1, 'USD', 'RUB', hr.sort 
from hotel h
	left join hotelpr hp on (hp.hotel = h.inc)
	inner join htpartpr ht on (ht.hotelpr = hp.inc)
--	inner join currate cr on (cr.currency = ht.currency)
	inner join htplace hc on (hc.inc = hp.htplace)
	inner join room hr on (hr.inc = hp.room) 
	inner join meal hm on (hm.inc = hp.meal)
where (h.inc = @hot) and (hp.datebeg <= @dg) and (hp.dateend >= @dg) and (hp.spos < 0)and (hr.sort >-1) 

declare @cur1 int
declare @ecur1 int
declare @rate1 float
declare @bankrate1 float
declare @units1 float
declare @erate1 float
declare @ebankrate1 float
declare @eunits1 float
declare @edate1 smalldatetime
declare @price1 float
declare @toprice1 float
declare @netprice1 float


select @cur1 = -1
select @rate1 = -1
select @bankrate1 = -1
select @units1 = -1
select @ecur1 = 2
select @edate1 = (select Max(tdate) from currate where (currency = @ecur1) and (tdate <= GetDate()))
select @erate1 = (select rate from currate where (currency = @ecur1) and (tdate = @edate1))
select @ebankrate1 = (select bankrate1 from currate where (currency = @ecur1) and (tdate = @edate1))
select @eunits1 = (select units from currate where (currency = @ecur1) and (tdate = @edate1))


 
declare hpd1_cursor cursor for
select [inc], price, toprice, netprice, ecur --, sort
from [dbo].[#hpd1]

OPEN hpd1_cursor

FETCH NEXT FROM hpd1_cursor
INTO @inc, @price1, @toprice1, @netprice1, @ecur1 --, @sort

WHILE @@FETCH_STATUS = 0
BEGIN

	if ((@price1 <> 0) or (@price1 <> Null))
	begin
	update #hpd1
	set [eprice] = [price]
	where inc = @inc
	end
	else
	begin
		if ((@toprice1 <> 0) or (@toprice1 <> Null))
		begin
		update #hpd1
		set [eprice] = [toprice]
		where inc = @inc
		end
		else
		begin
		update #hpd1
		set [eprice] = [netprice]
		where inc = @inc
		end
	end

	if (@ecur1 = 1)
	begin
		update #hpd1
		set [rprice] = [eprice]
		where inc = @inc
		update #hpd1
		set [eprice] = CEILING([eprice]/@ebankrate1*@eunits1), [rprice] = ROUND([rprice], -1), ecur = 2
		where inc = @inc
	end
	else
	begin
		if (@ecur1 = 2)
		begin
			update #hpd1
			set [eprice] = CEILING([eprice]), [rprice] = ROUND([eprice]*@ebankrate1/@eunits1, -1)
			where inc = @inc
		end
		else
		begin
			if (@ecur1 <> @cur1)
			begin
				select @cur1 = @ecur1
				select @edate1 = (select Max(tdate) from currate where (currency = @cur1) and (tdate <= GetDate()))
				select @rate1 = (select rate from currate where (currency = @cur1) and (tdate = @edate1))
				select @bankrate1 = (select bankrate from currate where (currency = @cur1) and (tdate = @edate1))
				select @units1 = (select units from currate where (currency = @cur1) and (tdate = @edate1))
			end
			update #hpd1
			set [eprice] = CEILING([eprice]*@bankrate1/@units/@ebankrate1*@eunits1), [rprice] = ROUND([eprice]*@bankrate1/@units1, -1), ecur = 2
			where inc = @inc
		end

	end
	FETCH NEXT FROM hpd1_cursor
	INTO @inc, @price1, @toprice1, @netprice1, @ecur1
END
CLOSE hpd1_cursor
DEALLOCATE hpd1_cursor
end

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort] 
from [#hpd]
order by  [rprice],[eprice] DESC

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort] 
from [#hpd]
order by [hname], [rname], [pname], [mname]

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort] 
from [#hpd1]
order by  [rprice],[eprice] DESC

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort]
from [#hpd1]
order by [hname], [rname], [pname], [mname]

DROP TABLE [#hpd]
DROP TABLE [#hpd1]


Сообщение было отредактировано: 25 июн 09, 16:51
25 июн 09, 16:50    [7344220]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Glory
Member

Откуда:
Сообщений: 104760
А что вы собирались проверять такой конструкцией

if  @tour = (select tr.inc
from hotel h
	inner join [town] t on (t.inc = h.town)
	inner join [tour] tr on (tr.state = t.state) and (tr.tourtype = 59) and (tr.state <> 60)
where h.inc = @hot)
....

else @tour = (select tr.inc
from hotel h
	inner join [town] t on (t.inc = h.town)
	inner join [tour] tr on (tr.state = t.state) and (tr.tourtype = 59) and tr.state = 60

where h.inc = @hot)
Что это за выражение после else ?
25 июн 09, 16:59    [7344307]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
ну вот...как раз в этом то у меня и есть ошибка...
25 июн 09, 17:04    [7344357]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Glory
Member

Откуда:
Сообщений: 104760
Zvez_DA
ну вот...как раз в этом то у меня и есть ошибка...

Ну так прочитайте в хелпе про синтаксис и что может идти после else

IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ] 
25 июн 09, 17:05    [7344370]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Мама рОдная... ничего себе блондинки код пишут...
25 июн 09, 17:10    [7344410]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
АнонимкиН
Guest
Дя уж))) Это будет софт для отелей. Однако)
25 июн 09, 17:11    [7344423]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Кстати,
if ((@price <> 0) or (@price <> Null))
выдаст True всегда. Т.к. 0 <> NULL, а NULL <> 0.
Здесь нужно
if ((@price <> 0) AND (@price <> Null))
25 июн 09, 17:13    [7344435]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
Хм, подумала исправила, процедура выполняется, только когда проверяю результат своей процедуры, мне пишет ошибку

Вот что получилось:
@hot int, @dg smalldatetime
as

declare @dog int
declare @com float
declare @sea int
declare @tour int
declare @inc int

select @dog = Datepart(yyyy, @dg)
select @sea = 0


select @com = (select commission
from season
where (tour = @tour)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonbeg/256) as varchar) + '/' + Cast((seasonbeg-seasonbeg/256*256) as varchar)) as smalldatetime) <= @dg)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonend/256) as varchar) + '/' + Cast((seasonend-seasonend/256*256) as varchar)) as smalldatetime) >= @dg))

select @sea = (select inc
from season
where (tour = @tour)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonbeg/256) as varchar) + '/' + Cast((seasonbeg-seasonbeg/256*256) as varchar)) as smalldatetime) <= @dg)
and (Cast((Cast(@dog as varchar) + '/' + Cast((seasonend/256) as varchar) + '/' + Cast((seasonend-seasonend/256*256) as varchar)) as smalldatetime) >= @dg))

if ((select Count(*) from Cservice where (season = @sea) and (hotel = @hot)) > 0)
select @com = (select commission from Cservice where (season = @sea) and (hotel = @hot))

if (@com is null)
select @com = 0

if (@com <> 0)
select @com = (1 + (@com/100))


CREATE TABLE [#hpd]([inc] [int] IDENTITY(1,1) NOT NULL,
[hname] [varchar] (250) NULL,
[rname] [varchar] (250) NULL,
[pname] [varchar] (250) NULL,
[mname] [varchar] (100) NULL,
[begdate] [smalldatetime] NULL,
[enddate] [smalldatetime] NULL,
[price] [float] NULL,
[toprice] [float] NULL,
[netprice] [float] NULL,
[eprice] [float] NULL,
[rprice] [float] NULL,
[ecur] [int] NULL,
[rcur] [int] NULL,
[ecname] [varchar] (20) NULL,
[rcname] [varchar] (20) NULL,
[sort] [int] NULL)


if @tour = (select tr.inc
from hotel h
inner join [town] t on (t.inc = h.town)
inner join [tour] tr on (tr.state = t.state) and (tr.tourtype = 59) and (tr.state <> 60)
where h.inc = @hot)

begin

insert into [#hpd]([hname], [rname], [pname], [mname], [begdate], [enddate], [price],
[toprice], [netprice], [ecur], [rcur], [ecname], [rcname], [sort])

select h.[name], hr.[name], hc.[name], hm.[name],hp.datebeg, hp.dateend, ht.price,
ht.cnet*@com, ht.net*@com, ht.currency, 1, 'EUR', 'RUB', hr.sort
from hotel h
left join hotelpr hp on (hp.hotel = h.inc)
inner join htpartpr ht on (ht.hotelpr = hp.inc)
-- inner join currate cr on (cr.currency = ht.currency)
inner join htplace hc on (hc.inc = hp.htplace)
inner join room hr on (hr.inc = hp.room)
inner join meal hm on (hm.inc = hp.meal)
where (h.inc = @hot) and (hp.datebeg <= @dg) and (hp.dateend >= @dg) and (hp.spos < 0)and (hr.sort >-1)


declare @cur int
declare @ecur int
declare @rate float
declare @bankrate float
declare @units float
declare @erate float
declare @ebankrate float
declare @eunits float
declare @edate smalldatetime
declare @price float
declare @toprice float
declare @netprice float


select @cur = -1
select @rate = -1
select @bankrate = -1
select @units = -1
select @ecur = 3
select @edate = (select Max(tdate) from currate where (currency = @ecur) and (tdate <= GetDate()))
select @erate = (select rate from currate where (currency = @ecur) and (tdate = @edate))
select @ebankrate = (select bankrate from currate where (currency = @ecur) and (tdate = @edate))
select @eunits = (select units from currate where (currency = @ecur) and (tdate = @edate))



declare hpd_cursor cursor for
select [inc], price, toprice, netprice, ecur--, sort
from [dbo].[#hpd]

OPEN hpd_cursor

FETCH NEXT FROM hpd_cursor
INTO @inc, @price, @toprice, @netprice, @ecur--, @sort

WHILE @@FETCH_STATUS = 0
BEGIN

if ((@price <> 0) or (@price <> Null))
begin
update #hpd
set [eprice] = [price]
where inc = @inc
end
else
begin
if ((@toprice <> 0) or (@toprice <> Null))
begin
update #hpd
set [eprice] = [toprice]
where inc = @inc
end
else
begin
update #hpd
set [eprice] = [netprice]
where inc = @inc
end
end

if (@ecur = 1)
begin
update #hpd
set [rprice] = [eprice]
where inc = @inc
update #hpd
set [eprice] = CEILING([eprice]/@ebankrate*@eunits), [rprice] = ROUND([rprice], -1), ecur = 3
where inc = @inc
end
else
begin
if (@ecur = 3)
begin
update #hpd
set [eprice] = CEILING([eprice]), [rprice] = ROUND([eprice]*@ebankrate/@eunits, -1)
where inc = @inc
end
else
begin
if (@ecur <> @cur)
begin
select @cur = @ecur
select @edate = (select Max(tdate) from currate where (currency = @cur) and (tdate <= GetDate()))
select @rate = (select rate from currate where (currency = @cur) and (tdate = @edate))
select @bankrate = (select bankrate from currate where (currency = @cur) and (tdate = @edate))
select @units = (select units from currate where (currency = @cur) and (tdate = @edate))
end
update #hpd
set [eprice] = CEILING([eprice]*@bankrate/@units/@ebankrate*@eunits), [rprice] = ROUND([eprice]*@bankrate/@units, -1), ecur = 3
where inc = @inc
end

end
FETCH NEXT FROM hpd_cursor
INTO @inc, @price, @toprice, @netprice, @ecur
END

CLOSE hpd_cursor
DEALLOCATE hpd_cursor
end

else
begin
insert into [#hpd]([hname], [rname], [pname], [mname], [begdate], [enddate], [price],
[toprice], [netprice], [ecur], [rcur], [ecname], [rcname], [sort])

select h.[name], hr.[name], hc.[name], hm.[name],hp.datebeg, hp.dateend, ht.price,
ht.cnet*@com, ht.net*@com, ht.currency, 1, 'USD', 'RUB', hr.sort
from hotel h
left join hotelpr hp on (hp.hotel = h.inc)
inner join htpartpr ht on (ht.hotelpr = hp.inc)
-- inner join currate cr on (cr.currency = ht.currency)
inner join htplace hc on (hc.inc = hp.htplace)
inner join room hr on (hr.inc = hp.room)
inner join meal hm on (hm.inc = hp.meal)
where (h.inc = @hot) and (hp.datebeg <= @dg) and (hp.dateend >= @dg) and (hp.spos < 0)and (hr.sort >-1)

declare @cur1 int
declare @ecur1 int
declare @rate1 float
declare @bankrate1 float
declare @units1 float
declare @erate1 float
declare @ebankrate1 float
declare @eunits1 float
declare @edate1 smalldatetime
declare @price1 float
declare @toprice1 float
declare @netprice1 float


select @cur1 = -1
select @rate1 = -1
select @bankrate1 = -1
select @units1 = -1
select @ecur1 = 2
select @edate1 = (select Max(tdate) from currate where (currency = @ecur1) and (tdate <= GetDate()))
select @erate1 = (select rate from currate where (currency = @ecur1) and (tdate = @edate1))
select @ebankrate1 = (select bankrate from currate where (currency = @ecur1) and (tdate = @edate1))
select @eunits1 = (select units from currate where (currency = @ecur1) and (tdate = @edate1))



declare hpd1_cursor cursor for
select [inc], price, toprice, netprice, ecur --, sort
from [dbo].[#hpd1]

OPEN hpd1_cursor

FETCH NEXT FROM hpd1_cursor
INTO @inc, @price1, @toprice1, @netprice1, @ecur1 --, @sort

WHILE @@FETCH_STATUS = 0
BEGIN

if ((@price1 <> 0) or (@price1 <> Null))
begin
update #hpd1
set [eprice] = [price]
where inc = @inc
end
else
begin
if ((@toprice1 <> 0) or (@toprice1 <> Null))
begin
update #hpd1
set [eprice] = [toprice]
where inc = @inc
end
else
begin
update #hpd1
set [eprice] = [netprice]
where inc = @inc
end
end

if (@ecur1 = 1)
begin
update #hpd1
set [rprice] = [eprice]
where inc = @inc
update #hpd1
set [eprice] = CEILING([eprice]/@ebankrate1*@eunits1), [rprice] = ROUND([rprice], -1), ecur = 2
where inc = @inc
end
else
begin
if (@ecur1 = 2)
begin
update #hpd1
set [eprice] = CEILING([eprice]), [rprice] = ROUND([eprice]*@ebankrate1/@eunits1, -1)
where inc = @inc
end
else
begin
if (@ecur1 <> @cur1)
begin
select @cur1 = @ecur1
select @edate1 = (select Max(tdate) from currate where (currency = @cur1) and (tdate <= GetDate()))
select @rate1 = (select rate from currate where (currency = @cur1) and (tdate = @edate1))
select @bankrate1 = (select bankrate from currate where (currency = @cur1) and (tdate = @edate1))
select @units1 = (select units from currate where (currency = @cur1) and (tdate = @edate1))
end
update #hpd1
set [eprice] = CEILING([eprice]*@bankrate1/@units/@ebankrate1*@eunits1), [rprice] = ROUND([eprice]*@bankrate1/@units1, -1), ecur = 2
where inc = @inc
end

end
FETCH NEXT FROM hpd1_cursor
INTO @inc, @price1, @toprice1, @netprice1, @ecur1
END
CLOSE hpd1_cursor
DEALLOCATE hpd1_cursor
end

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort]
from [#hpd]
order by [rprice],[eprice] DESC

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort]
from [#hpd]
order by [hname], [rname], [pname], [mname]

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort]
from [#hpd1]
order by [rprice],[eprice] DESC

select [hname], [rname], [pname], [mname], [begdate], [enddate], [eprice], [ecname], [rprice], [rcname], [sort]
from [#hpd1]
order by [hname], [rname], [pname], [mname]

DROP TABLE [#hpd]
DROP TABLE [#hpd1]
25 июн 09, 17:14    [7344449]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Точнее,
if ((@price <> 0) AND (@price IS NOT NULL))
25 июн 09, 17:16    [7344474]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Glory
Member

Откуда:
Сообщений: 104760
Zvez_DA
Хм, подумала исправила, процедура выполняется, только когда проверяю результат своей процедуры, мне пишет ошибку

А блондинки умеют публиковать сообщения об ошибке и пользоваться при оформлении сообщения тэгами ?
25 июн 09, 17:18    [7344490]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
Исправила синтаксис после else
25 июн 09, 17:18    [7344494]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Eugene_p1
Member

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

вы бы исправления выделяли, да код в тэгах SRC писали... А то глаза сломать можно, читая 2 страницы кода.
25 июн 09, 17:18    [7344498]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
Вот она это ошибка: Invalid object name '#hpd1'.
Но на сервере процедура выполнилась.
25 июн 09, 17:26    [7344548]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
belkinn
Member

Откуда: Msk
Сообщений: 11
Предположу, что в
else @tour = (select tr.inc
from hotel h
	inner join [town] t on (t.inc = h.town)
	inner join [tour] tr on (tr.state = t.state) and (tr.tourtype = 59) and tr.state = 60

where h.inc = @hot)
begin
должно быть if после else

и в самом начале:
возможна ли конструкция
INSERT INTO ...
IF (...)
SELECT
?
25 июн 09, 17:26    [7344552]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
хм, почему-то у меня через раз выводит код в тэгах SRC
25 июн 09, 17:39    [7344633]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
Вообщем тепреь просто у меня ничего не считает, и даже если:

if @tour = (select tr.inc
from hotel h
inner join [town] t on (t.inc = h.town)
inner join [tour] tr on (tr.state = t.state) and (tr.tourtype = 59) and (tr.state <> 60)
where h.inc = @hot)

else
begin
select h.[name], hr.[name], hc.[name], hm.[name],hp.datebeg, hp.dateend, ht.price,
ht.cnet*@com, ht.net*@com, ht.currency, 1, 'USD', 'RUB', hr.sort
25 июн 09, 17:47    [7344679]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
да и работаю с sql server 2005
25 июн 09, 18:25    [7344836]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Zvez_DA
Member

Откуда: Москва
Сообщений: 68
Ребята спасибо всем большой!!!!!!!!!!!!!!!!!!!!!!!!!что советовали мне!!!
но я во всем разобралась сама и все исправила!!!!!!!!!!!!
25 июн 09, 20:33    [7345105]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
CroCIV
Member

Откуда:
Сообщений: 7
Zvez_DA,

ну вот не такая уж ты и блондинка, зря прибеднялась. за самостоятельность респектую ))
25 июн 09, 21:26    [7345196]     Ответить | Цитировать Сообщить модератору
 Re: Не работает процедура, помогите настоящей блондине  [new]
Eugene_p1
Member

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

IMHO, код всё равно нуждается в упрощении. Через пару дней/недель взглянете на свой запрос - возможно, придумаете гениальное и простое решение.
Например, зачем 2 копии курсора в блоках где if..... = 60 и if ..... <> 60 ? Это (= / <> 60) можно проверить прямо при обработке курсора. В может, и курсор не понадобится.
26 июн 09, 10:14    [7346319]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить