Member 12770648 Ответов: 1

Как вызвать функцию в ms SQL server 2008


MS SQL SERVER 2008


Как я могу вызвать функцию Fn_workinghour

Пожалуйста помогите


DECLARE @table AS TABLE(
startday DATETIME,
endday DATETIME)

INSERT INTO @table
          SELECT '22-Jun-2010 13:00:00', '22-Jun-2010 13:15:00'
UNION ALL SELECT '22-Jun-2007 13:00:00', '23-Feb-2010 13:15:00'
UNION ALL SELECT '21-Jun-2010 13:00:00', '23-Jun-2010 13:00:00'

SELECT dbo.fn_workinghour(startday, endday) FROM @table



---------------------------------------------------------------------------
-----------------------------------------------------------------------------


alter FUNCTION Fn_workinghour (@start_date DATETIME,
@end_date DATETIME)
RETURNS DECIMAL(10, 2)
AS
BEGIN
DECLARE @work_calender AS TABLE (
[day_number] [VARCHAR] (50),
[day_name] [VARCHAR] (50),
[begin_time] [DATETIME],
[end_time] [DATETIME],
[duration] [REAL] )

INSERT INTO @work_calender
SELECT 1,
'Monday',
'7:00:00 AM',
'6:00:00 PM',
39600
UNION ALL
SELECT 2,
'Tuesday',
'7:00:00 AM',
'6:00:00 PM',
39600
UNION ALL
SELECT 3,
'Wednesday',
'7:00:00 AM',
'6:00:00 PM',
39600
UNION ALL
SELECT 4,
'Thursday',
'7:00:00 AM',
'6:00:00 PM',
39600
UNION ALL
SELECT 5,
'Friday',
'7:00:00 AM',
'6:00:00 PM',
39600
UNION ALL
SELECT 6,
'Saturday',
'8:00:00 AM',
'1:00:00 PM',
18000
UNION ALL
SELECT 7,
'Sunday',
'12:00:00 AM',
'12:00:00 AM',
0

DECLARE @total_hours DECIMAL(10, 2)

SELECT @total_hours = SUM(CASE
WHEN Dateadd(DAY, Datediff(DAY, 0, @start_date
),
0)
=
Dateadd(DAY, Datediff(DAY, 0,
@end_date), 0) THEN
Datediff(SECOND, @start_date, @end_date)
WHEN [DATE] = Dateadd(DAY, Datediff(DAY, 0,
@start_date), 0
) THEN
CASE
WHEN
@start_date > [DATE] + begin_time THEN
Datediff(SECOND, @start_date, [DATE] +
end_time)
ELSE duration
END
WHEN [DATE] = Dateadd(DAY, Datediff(DAY, 0,
@end_date), 0)
THEN
CASE
WHEN
@end_date < [DATE] + end_time THEN
Datediff(SECOND, [DATE] + begin_time,
@end_date)
ELSE duration
END
ELSE duration
END) / 60.0 / 60.0
FROM F_table_date(@start_date, @end_date) d
INNER JOIN @work_calender c
ON d.weekday_name_long = c.day_name

RETURN @total_hours
END


Что я уже пробовал:

Это программа в стадии разработки

Bryian Tan

Что плохого в том, что у тебя есть сейчас? По-моему, все в порядке. Есть сообщение об ошибке?

Member 12770648

Как вы вызываете вызываемую подпрограмму из вызывающей?

Karthik_Mahalingam

использовать  Ответить   кнопка для отправки комментариев/запросов заинтересованному пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

1 Ответов

Рейтинг:
0

Bryian Tan

SQL - запросы выглядят нормально, и он должен возвращать общее количество часов для каждой строки в таблице@. Вы не упомянули, в чем была проблема. Я предполагаю, что запрос выдает ошибку "недопустимое имя объекта 'F_table_date'".?

Если это так, то если вы посмотрите внимательно, то функция Fn_workinghour ссылается на другую функцию табличного значения, а именно "F_table_date". Для создания этой функции в среде базы данных необходимо запустить сценарий SQL. Вот этот сценарий F_TABLE_DATE.в SQL
[^] .

Надеюсь, что это проблема.