powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большой вопрос по функции suser_sname() в MS SQL 2000
9 сообщений из 9, страница 1 из 1
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019819
Mitrish_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В базе на MS SQL 2000 в таблицу был мной добавлен столбец User с Defaults функцией suser_sname() которая возвращает имя пользователя создавшего запись в таблице. Всем пользователям прикрыл доступ на этот столбец на Update.
Но, эта функция возвращает только имя пользователя СОЗДАВШЕГО новую запись в таблице.
Если какой-то другой пользователь изменит эту запись, то в столбце User все равно остается имя пользователя создавшего запись, а не последнего, кто ее изменил.
Не подскажите мне как и что правильно сделать в базе, чтобы в столбце User хранились учетные записи пользователей которые последними изменяли запись, и что-бы пользователи имели права только на Select по этому столбцу.
Заранее благодарен
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019821
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если по-быстрому, то с помощью update-а в update триггере.
А если по-хорошему, то лучше завести таблицу аудита, куда и складывать всю информацию о том кто и когда и что.
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019855
Mitrish_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот делаю триггер:
CREATE TRIGGER Dogovora_trigger1 ON [dbo].[Dogovora]
FOR UPDATE
AS
begin
UPDATE [dbo].[Dogovora]
SET user_sec=suser_sname()
WHERE id_dog=.... <===(какое выражение дожно тут быть чтобы был
end UPDATE только той записи в которой я или
другой юзер произвел изменение??)
id_dog - ключевое поле таблицы Dogovora
Т.е. какая есть функция типа current_id_row(table) ?
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019856
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
where id_dog = inserted.id_dog
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019858
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее, так:

UPDATE Dogovora
SET user_sec = suser_sname()
from Dogovora, inserted
WHERE Dogovora.id_dog = inserted.id_dog
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019859
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Mitrish_v:

Как показал GreenSunrise и будет по-быстрому.

А если по хорошему, то поле-то одно, и Вы там сможете видеть имя только последнего пользователя. А информация о всех предыдущих изменениях, в том числе о вставке, будет утеряна.
"Кто последний тот и папа?"
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019904
Mitrish_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем ответившим! Хороший форум, чесн слово!

Ну а насчет папы...
Тут Вы правы. Может это и не совсем правильно будет, но наверно логично будет создать 2 столбца - один скажем row_creator а другой row_updating. в моем случае этого будет достаточно, т.к. занесением информации будет заниматься ограниченный круг людей (я да я ) ну мож еще 1 человек.
А не подскажете ли мне, где и какая есть литература или информация (на русском) по MS SQL 2000 для новичка?
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019906
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>но наверно логично будет создать 2 столбца - один скажем row_creator а другой row_updating
Абсолютно нелогично и неправильно. Хочешь знать только последнего пользователя - оставь один столбец, хочешь знать всю предысторию - сделай нормальный аудит, полноценный. Ну потом же сам будешь кричать: блин, как много нужно переделывать!!! Или после тебя народ будет материться: какой #$% это написал?! Ограничить предысторию (если потом захочется) можно и по количеству архивных данных (допустим, хранить N последних записей об изменениях), и по времени (месяц, год). Это уже неважно - главное, сделать хорошую основу себе и всем остальным.

>занесением информации будет заниматься ограниченный круг людей (я да я ) ну мож еще 1 человек
Ага. Заводим столбец для себя, и еще один для вот этого "1 человека". А потом совсем случайно появляется еще один, заведем и для него... Так?
...
Рейтинг: 0 / 0
Большой вопрос по функции suser_sname() в MS SQL 2000
    #32019946
Mitrish_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>занесением информации будет заниматься ограниченный круг людей (я да я ) ну мож еще 1 >человек
>Ага. Заводим столбец для себя, и еще один для вот этого "1 человека". А потом совсем >случайно появляется еще один, заведем и для него... Так?

И не совсем так.....
Первый столбец "row_creator" будет содержать имя юзера создавшего запись, а второй столбец "row_updating" - имя внесшего последнюю модификацию в запись.
А шо такое аудит я еще смутно себе представляю, особенно как его настраивать (че ж я и просил инфу по MS SQL 2000).
Да и однозначное определению автора и и последнего изменившего запись вполне меня
устраивает.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большой вопрос по функции suser_sname() в MS SQL 2000
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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