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

Откуда: Украина, Донецк
Сообщений: 61
У меня есть следующая функция
USE [Аэропорт]
GO
/****** Object:  UserDefinedFunction [dbo].[DateList]    Script Date: 12/10/2012 02:09:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[DateList](@from DATE, @till DATE, @key INT, @time_in TIME, @time_out TIME)
RETURNS @list TABLE (kod INT,dt_in SMALLDATETIME,dt_out SMALLDATETIME)
BEGIN
	BEGIN
	WHILE @from <= @till BEGIN
		INSERT INTO @list VALUES(@key, CAST(@from AS SMALLDATETIME) + @time_in, CAST(@new AS SMALLDATETIME) + @time_out) 
		END
	END	
	RETURN
END


Мне нужно в параметре dt_out проверять, если @time_in < @time_out тогда добавлять один день...
Я использовала уже все известные мне методы и всё безтолку
18 дек 12, 10:31    [13647209]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
Гость333
Member

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

Покажите полный текст функции. То, что вы привели, не скомпилируется, т.к. переменная @new не объявлена. Кроме того, у вас здесь бесконечный цикл.

One_question
Я использовала уже все известные мне методы и всё безтолку

Какие именно методы вы использовали?
18 дек 12, 10:40    [13647267]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Гость333, Простите, там @from вместо @new
Я пробовала if - ами сделать.. но там явно все не правильно..
ALTER FUNCTION [dbo].[DateList](@from DATE, @till DATE, @key INT, @time_in TIME, @time_out TIME)
RETURNS @list TABLE (kod INT,dt_in SMALLDATETIME,dt_out SMALLDATETIME)
BEGIN
	DECLARE @new DATE
	BEGIN
	WHILE @from <= @till BEGIN
		INSERT INTO @list VALUES(@key, CAST(@from AS SMALLDATETIME) + @time_in, CAST(@new AS SMALLDATETIME) + @time_out) 
		SET @from = DATEADD(day, 1, @from)
	IF (@time_in < @time_out)
		SET @new = DATEADD(day, 1, @from)
	ELSE 
		SET @new = @from
		END
	END	
	RETURN
END
18 дек 12, 10:46    [13647301]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
Гость333
Member

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

1) При первом проходе цикла переменная @new не инициализирована, а следовательно, имеет значение NULL.
2) dt_in, dt_out — кто из них дата вылета, а кто — дата прилёта?
18 дек 12, 10:57    [13647354]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Гость333,
Гость333
2) dt_in, dt_out — кто из них дата вылета, а кто — дата прилёта?

dt_in - время вылета
dt_out - время прибытия

Гость333
1) При первом проходе цикла переменная @new не инициализирована, а следовательно, имеет значение NULL.
Ну, это я заметила по результату запроса первая переменная из промежутка NULL
И да, там @time_in > @time_out
Мне эта функция так глаза мозолит что не вижу элементарного
18 дек 12, 11:04    [13647386]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Гость333,


Ой как же красиво и замечательно работает! Спасибо огромнейшее! Мои бессонные ночи наконец-то закончатся =)
18 дек 12, 11:10    [13647410]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
aleks2
Guest
Ну скажите ж хто-нибудь, что это говнокод.
18 дек 12, 11:28    [13647552]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
AnaceH
Member

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

Я уже намекал автору, но она сослалась на отсутствие опыта. Обещала исправиться через пару лет. Сижу, вот, жду.
18 дек 12, 11:40    [13647641]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
Гость333
Member

Откуда:
Сообщений: 3683
aleks2
Ну скажите ж хто-нибудь, что это говнокод.

Насколько я понимаю, это курсовой проект. Так что ещё нормально. Если в дальнейшем ТС будет профессионально заниматься БД, то узнает про таблицу чисел, ограничения UDF и прочая.
18 дек 12, 11:40    [13647647]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по функции  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2567
AnaceH
aleks2,

Я уже намекал автору, но она сослалась на отсутствие опыта. Обещала исправиться через пару лет. Сижу, вот, жду.
Через пару лет она выйдет замуж, а там щи-борщи и прощай IT. И слава Богу
18 дек 12, 11:44    [13647678]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить