powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как попроще запретить изменения записей в таблице не за текущий день.
11 сообщений из 11, страница 1 из 1
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027749
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как попроще запретить изменения записей в таблице и в подтаблице не за текущий день (Записи датированы при помощи поля Date)?
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027750
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использовать Триггер с проверкой даты......
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027755
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то в голову не приходит, что в этом триггере написать. Может кто-то подскажет...
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027758
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За синтаксис не отвечаю на память не помню, но принцип такой

if exists(select * from deleted D where datediff(dd,D.datenlog,getdate())!=0
begin
Rollback Tran
raiseerror(..???.'Ошибка !!') --вроде такая функція
return
end

где
1) datenlog - вспомогательное поле куда автоматом присваевается getdate()
2) datediff или datendiff (не помню) функция в BOL
3) raiseerror не помню точно как пишиться, для генерации ошибки, что бы показать пользователю надпись, придется тебе поиграться с ее параметрами.
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027782
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не лучше ли использовать представления...
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027787
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RE: Александру Третьякову
Спасибо. Вот что получилось:

if exists(select * from deleted D where datediff(dd, Дата, getdate())<>0)
or exists(select * from inserted D where datediff(dd, Дата, getdate())<>0)
begin
raiserror ('Разрешается изменение записей только за текущий день', 16, 1)
ROLLBACK TRANSACTION
return
end

RE: Александру Гладченко
Если в представлении, прийдется использовать разные представления для просмотра и изменения, и кроме того можна вставить запись неудовлетворяющую условием отбора.
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027815
Speshuric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо часто стоит условие по текущей дате вынести в представление (и в его триггер) или создать сторед проц. А прямые права у всех пользователей на основную табличку порезать. Просто часто встают служебные задачи чего-то делать задним числом (например перезаполнить столбец или импортировать данные из аналогичной БД и т.п.). Тогда вот задним, но уже не числом придется делать вот эти действия: либо вставлять в триггер контроль прав (что неверно в принципе), либо drop/create, что не менее ошибочно... Если нужно, одумайтесь (вполне может оказаться, что вариант с триггером для вас идеален).
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027863
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Re: Speshuric

CREATE PROCEDURE EnableDataEdit
AS
ALTER TABLE MyTable DISABLE TRIGGER Trigger1

CREATE PROCEDURE DisableDataEdit
AS
ALTER TABLE MyTable Enable TRIGGER Trigger1

или можно в одной процедуре с параметром.
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32027867
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2V. Motchulsky:

disable trigger и enable trigger действуют на все подключения, не только на текущее, так что это небезопасно.
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32028448
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если контроль нужен только при добавлении или изменении, то триггер, IMHO, - излишество,
достаточно сделать соответствуюший табличный CONSTRAINT, например, следующего вида:
DateDiff(dd,[date], CURRENT_TIMESTAMP)= 0
...
Рейтинг: 0 / 0
Как попроще запретить изменения записей в таблице не за текущий день.
    #32028460
Speshuric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Re: V. Motchulsky
А вот ИМЕННО такого варианта, хотелось бы избежать во имя целосности данных.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как попроще запретить изменения записей в таблице не за текущий день.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]