Професионална програма
Loading...
Denislava91 avatar Denislava91 5 Точки

11.Hours to Complete Database Basics MS SQL Exam 8 April 2021

Здравейте,

 

Някой ако сподели решение на тази на пръв поглед лесна задача, много ще съм благодарна.

1во не мога да разбера дали трябва да връща само една стойност или няколко, както е показано на примера. Според условието би трябвало да е една. 

Не мога да си представя и как да проверя по отделно дали датата на започване и прикл'чване са нула.

CREATE FUNCTION udf_HoursToComplete(@StartDate DATETIME, @EndDate DATETIME)
RETURNS INT
BEGIN

DECLARE @result INT=(
SELECT
IIF(DATEDIFF(HOUR,@StartDate,@EndDate)IS NULL,0,DATEDIFF(HOUR,@StartDate,@EndDate))
FROM Reports);

RETURN @result;
END

 

Предварително благодаря.

 

Тагове:
0
Module: C# DB
icowwww avatar icowwww 1674 Точки
Best Answer

Здравей,

В примера е показано, че твоята функия ще се извиква за всеки ред в Reports. Трябва да връща една стойност, както е показано в примера. А ти правиш селекция върху Reports, и съответно връщаш една и съща стойност за всеки ред в тази таблица. Реално процедурата няма нищо общо с таблицата, тя просто приема 2 стойности и връща една.

Най-лесно можеш да поправиш това като изтриеш FROM Reports:

CREATE FUNCTION udf_HoursToComplete(@StartDate DATETIME, @EndDate DATETIME)
RETURNS INT
BEGIN

DECLARE @result INT=(
SELECT
IIF(DATEDIFF(HOUR,@StartDate,@EndDate)IS NULL,0,DATEDIFF(HOUR,@StartDate,@EndDate))
);

RETURN @result;
END

 

0
16/10/2021 21:36:43
Denislava91 avatar Denislava91 5 Точки

Благодаря ти!

 

Много си прав, то това е смисълът на процедурата, да не е обвързана с конкретна таблица и да работи в общия случай:)

 

Поздрави.

 

Дени

0
18/10/2021 11:20:21