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

Откуда:
Сообщений: 567
Помогите, пожалуйста написать хранимку которая находит в БД самую свежую дату из тех записей, которые удовлетворяют условию.
Например, необходимо получить последнюю дату за которую студент получил оценку. (Студент часто получает оценки, почти каждый день, но интересует дата получения студентом ПОСЛЕДНЕЙ оценки на текущий момент, то-есть - самая последняя оценка)


Тут чего-т уже состряпал с горем по полам:

ALTER PROCEDURE dbo.GetDateLastMessageFromUser

@studentName nvarchar(255),
@lastDateMark DateTime OUTPUT

AS

SET @lastDateMark = (SELECT MAX(tableName.addDateMark) FROM dbo.tableName WHERE tableName.studentName = @studentName);

RETURN

Я в SQL не очень, точнее очень НЕ.

Поэтому прошу не смеяться, а помочь, если можно.

проблема ещё в том, что данная процедура может присвоить выходному параметру значение null. Ведь не факт, что студент с заданным именем получил хотя бы одну оценку. То-есть такой записи попросту может не быть и тогда @lastDateMark не установится в определенное значение и в коде C# вылетит исключение. Как обойти данную ситуацию?
Может ввести ещё один параметр, который будет показывать или @lastDateMark установлен, или - нет?
30 окт 09, 18:36    [7864520]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура и параметры  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Простите, уже решил вопрос.
30 окт 09, 19:26    [7864682]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура и параметры  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
serverokAsservelat,

DateTime dt = command.Parameters["@lastDateMark"] == DBNull.Value? (DateTime) null : (DateTime)command.Parameters["@lastDateMark"] .SqlValue;
30 окт 09, 20:48    [7864925]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура и параметры  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Спасибо. Я то решил чуточку по-другому - через TryParse(""), но Ваш вариант мне понравился больше. Переписываю Вашим вариантом. Спасибо!
31 окт 09, 10:51    [7866032]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура и параметры  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Есть маленькая неточность: тип DateTime не поддерживает значение null, поэтому не может выполнить преобразование. В принципе вопрос можно решить заменой значения (DateTime) null на:
DateTime.Now.AddDays(-100).
31 окт 09, 11:04    [7866056]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура и параметры  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
serverokAsservelat
Есть маленькая неточность: тип DateTime не поддерживает значение null, поэтому не может выполнить преобразование. В принципе вопрос можно решить заменой значения (DateTime) null на:
DateTime.Now.AddDays(-100).

ну таки я ошибся
DateTime? dt = command.Parameters["@lastDateMark"] == DBNull.Value? (DateTime?) null : (DateTime)command.Parameters["@lastDateMark"] .SqlValue;

логика-то хреновая у вас . в ХП в случае null установите необходимую дату. либо DataTime nulliable сделайте.
31 окт 09, 12:37    [7866245]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить