С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 30
1

Триггер на проверку дня недели

24.03.2015, 16:57. Показов 2413. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть таблица Платежи, у таблицы Платежи есть поле Дата_платежа, в задании требуется написать триггер , который бы запрещал добавлять платеж по воскресеньям. Код триггера
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
ALTER TRIGGER [dbo].[proverka_plat]
ON [dbo].[Платежи]
FOR INSERT  
AS
DECLARE @data datetime
DECLARE @data2 nvarchar(15)
set @data = (select Дата_платежа from inserted)
IF  datename(day,@data) in ('Sunday')
begin 
print 'Запрещено добавлять платежи в воскресенье'
rollback transaction
end
Триггер компилируется без ошибок, но не действует. При добавлении строки с датой например: 2015-03-22, строка без проблем добавляется! В чем может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2015, 16:57
Ответы с готовыми решениями:

Вывод дня недели своего дня рождения
Не сильно разбираюсь в SQL, прошу помочь с заданиями по SQL. 1) Вывести день недели своего дня...

Триггер на проверку старосты
Есть 2 таблицы Студенты(студ_ид, ФИО, груп_ид, староста_ид) и Группа(Груп_ид, груп_нейм)! Нужен...

Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели
Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня...

Найти номер дня недели К-го дня года, если в этом году 1 января было днем недели с номером N
Дни недели пронумерованы следующим образом: 0 - воскресенье, 1 - понедельник, 2 - вторник, ..., 6 -...

7
323 / 49 / 28
Регистрация: 07.09.2014
Сообщений: 217
24.03.2015, 17:16 2
В datename используйте не day, а dw - datename(day,getdate()) возвращает число, а datename(dw,getdate()) день недели.
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,271
24.03.2015, 17:20 3
Цитата Сообщение от Sashura Посмотреть сообщение
При добавлении строки с датой например: 2015-03-22, строка без проблем добавляется! В чем может быть проблема?
В том , что нужно писать не day, а WEEKDAY.
Но даже в этом случае будут проблемы, если язык будет русским, например.

Лучше принять во внимание, что 1 января 1900 года было понедельником:
T-SQL
1
IF DATEDIFF(DAY,0,@data)%7=6
Однако, по моему скромному мнению совершенно недопустимо писать
T-SQL
1
set @data = (select Дата_платежа from inserted)
, ибо в inserted находятся гораздо больше одной записи.
За такое надо выводить во двор и расстреливать!
1
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 30
24.03.2015, 17:29  [ТС] 4
Исправил на dw
T-SQL
1
IF  datename(dw,@data) in ('Sunday')
.
Результат такой же

Добавлено через 5 минут
Цитата Сообщение от iap Посмотреть сообщение
В том , что нужно писать не day, а WEEKDAY.
Но даже в этом случае будут проблемы, если язык будет русским, например.

Лучше принять во внимание, что 1 января 1900 года было понедельником:
T-SQL
1
IF DATEDIFF(DAY,0,@data)%7=6
Однако, по моему скромному мнению совершенно недопустимо писать
T-SQL
1
set @data = (select Дата_платежа from inserted)
, ибо в inserted находятся гораздо больше одной записи.
За такое надо выводить во двор и расстреливать!
T-SQL
1
set @data = (select Дата_платежа from inserted)
сюда еще проверку where нужно добавить

Добавлено через 43 секунды
или что-то другое?
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,271
24.03.2015, 17:35 5
Цитата Сообщение от Sashura Посмотреть сообщение
T-SQL
1
set @data = (select Дата_платежа from inserted)
сюда еще проверку where нужно добавить
Добавлено через 43 секунды
или что-то другое?
Надо представить себе, что в inserted сейчас лажит миллион записей.
И исходить из этого. Применять все доступные операции с множествами (JOIN, EXISTS(), UNION, INTERSECT, EXCEPT и т.д. и т.п.)
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 30
24.03.2015, 17:38  [ТС] 6
Подскажите как правильно?

Добавлено через 2 минуты
T-SQL
1
2
IF EXISTS (SELECT * Платежи.Дата_Платежа, inserted
where Платежи.Дата_Платежа = inserted.Дата_Платежа )
Так должно быть или как-то иначе?
0
1652 / 1151 / 173
Регистрация: 23.07.2010
Сообщений: 6,858
25.03.2015, 08:49 7
Цитата Сообщение от iap Посмотреть сообщение
За такое надо выводить во двор и расстреливать!

Не по теме:


:D +100500!

0
11 / 9 / 6
Регистрация: 07.11.2013
Сообщений: 335
26.03.2015, 10:02 8
Вам же написали уже все
Цитата Сообщение от iap Посмотреть сообщение
IF DATEDIFF(DAY,0,@data)%7=6
т.е. ваш код
T-SQL
1
2
3
4
5
6
7
8
ALTER TRIGGER [dbo].[proverka_plat]
ON [dbo].[Платежи]
FOR INSERT  
IF DATEDIFF(DAY,0,getdate())%7=6
begin 
print 'Запрещено добавлять платежи в воскресенье'
rollback transaction
end
0
26.03.2015, 10:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2015, 10:02
Помогаю со студенческими работами здесь

Написать программу, которая по номеру дня недели (целому числу от 1 до 7) выдает в качестве результата название дня недели
!!!!!

Отобразить соответствующий день недели в соответствии с номером введенного дня недели
Отобразите соответствующий день недели в соответствии с номером введенного дня недели. Если такого...

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

Определить номер месяца M и дня недели D по порядковому номеру дня в году
Вводится число T-порядковый день в году.Определить номер месяца M и дня недели D, соответствующих...

Определить номер дня недели для заданного номера дня года
а как это примерно будет на C++ ?

Напишите программу, которая выводит название дня недели по номеру дня
4. Напишите программу, которая выводит название дня недели по номеру дня, введённому с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru