|
|
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
MS SQL SERVER 2000. Такая вот ситуация: Есть табличка BIBLIOTEKA. Столбцы:CD (здесь и далее CD воспринимать как ID) Title - заголовок, Date_creation - дата создания записи, Creator - идентификацилнный номер пользователя, который создал эту запись, Date_editing - дата редактирования записи, Editor - идентификацилнный номер пользователя, который вносил изменения в эту запись. По умолчанию в колонке Date_creation стоит getdate(), то есть при создании новой записи он сразу заполняет ячейку датой, (вообще-то не просто getdate(), а stuff(convert(varchar(17),getdate(),113),1,11,convert(varchar(25),getdate(),104)) - чтобы выдавал дату и время в формате 10.09.2002 7:59). На апдейт у меня написан триггер: CREATE TRIGGER [EDIT_DATE] ON [dbo].[BIBLIOTEKA] FOR Update AS update BIBLIOTEKA set Date_editing=stuff(convert(varchar(17),getdate(),113),1,11,convert(varchar(25),getdate(),104)) from BIBLIOTEKA b, inserted i where b.CD=i.CD. Есть вторая табличка MY_BASE_USERS В ней столбцы: ID_USER, LogName, LastName,SecondName. В ней хранится список пользователей которых я допустил к работе с базой. (Вношу этот список вручную). С этим я справился. Затем встала задача вносить при соответствующих действиях пользователей их номера в соотв. колонки. То есть я примерно представляю, что надо наверное написать UserDefinedFunction, в к-рой с помощью функций user или system_user или session_user (кстати не понял в чем их отличие) взять информацию об пользователе, делающему операцию Insert или Update с первой таблицей, проверить есть ли такой пользователь во второй таблице и если да, то взять его идентифик.номер. Если нет, ласково отправить к сисадмину. Затем я эту UDF должен по идее впихнуть как default value в колонку Creator, чтобы при создании туда его впихивала. А в триггере на апдейт тоже добавить эту функцию, чтобы впихивала ID пользователя (не системный ID а мой, из моей таблички) в колонку Editor. Очень прошу помочь начинающему, волею судеб столкнувшемуся с SQL SERVER 2000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2002, 07:13:53 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
Написать функцию не проблема. Нужна ли она вам? Почему не обойтись стандартными средствами сиквела для раздачи прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2002, 10:08:30 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
У меня сделано так. Работает с интегратед секурити. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Адаптируй под свою структуру. system_user - логин в SQL. user - пользователь в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2002, 10:18:18 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
(вообще-то не просто getdate(), а stuff(convert(varchar(17),getdate(),113),1,11,convert(varchar(25),getdate(),104)) - чтобы выдавал дату и время в формате 10.09.2002 7:59). Хм, если у вас поля Date_creation и Date_editing имеют тип datetime, то к чем такие манипуляции ? А в остальном согласен с GreenSunrise. Если пользователь уже имеет права на INSERT/UPDATE таблицы, то зачем еще раз проверять их наличие ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2002, 12:37:51 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
ну помогите написать процедурку(не UDF, перепутал выше), плиз - вообще не разбираюсь в TSQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 10:05:00 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Хотя функция удобней, просто сделай Creator NOT NULL DEFAULT GETUSER() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 10:42:53 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise Что такое "сиквела"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 11:16:11 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
Не много не так, Надо вот какую задачу решить: В первую таблицу вносится новая запись в колонкуТайтл (варчар). Здесь должна сработать процедурка, или триггер, взять командой session_user имя пользователя, поискать его в ДРУГОЙ ТАБЛИЦЕ, и если он там есть, то взять в этой таблице его идентификационный номер (колонка ID_USER) и внести этот номер в колонку Creator (int) в ПЕРВОЙ ТАБЛИЦЕ. То есть как организовать проверку того, что мне вернет функция Session_user с тем что есть в таблице MY_BASE_USERS, если есть, то взять соответствующий номер из колонки ID_USER и впихнуть его в первую таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 11:33:04 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
2 3JIA9I CyKA: Подразумевалось, что раздаем права на те или иные объекты в базе конкретным пользователям или группам пользователей и обходимся без второй таблицы вообще. Или я неправильно понимаю ваш вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 12:03:59 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
то KleFF А я что, не это написал? Что, не додуматься как заменить employees на MY_BASE_USERS id на ID_USER и добавить поле login в таблицу MY_BASE_USERS в которое прописать логины, соотв. юзерам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 12:14:32 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
хорошо, я написал UDF, а как ее вызвать? Или как этот алгоритм впихнуть в триггер? Че-то у меня у самого не получается. Есть триггер на апдейт таблицы - он вставляет дату и время, а еще надо вставить номер того кто вставил. Можно ли из триггера вызвать UDF?или хранимую процедуру? что-то у меня не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 17:42:47 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
как вызвать UDF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 20:25:16 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
Ну написал я процедуру USER_CD, когда в QA пишу exec user_CD он мне возвращает правильный номер. А как теперь применить эту процедуру, чтобы при инсерте или апдейте в соответствующие колонки вносил этот номер. к-рый получает процедура? В триггере как прописать? Подскажите, очень надо побыстрее оформить все это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 21:36:12 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
В триггере как прописать? Так же как в QA declare @myuserid int exec dbo.user_CD @retuserid=@myuserid OUT и потом UPDATE mytable SET reg_user_id = @myuserid FROM mytable INNER JOIN inserted ON .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2002, 22:21:48 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise Вы меня не поняли. Что такое "сиквела" (или "сиквел")? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2002, 12:06:14 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
хорошо, я написал UDF, а как ее вызвать? Так же как и системную функцию, только dbo. перед ней поставить. Или как этот алгоритм впихнуть в триггер? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2002, 12:31:26 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
2 3JIA9I CyKA: классно - люди о своем, мы - о своем... "сиквел" = SQL. произносится так, чтобы язык не ломать. ЭсКуЭль - не всякий выговорит :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2002, 13:00:01 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
И не непишет? Пальцы сломает? Почему не "свекла"? А DDL как будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2002, 13:11:57 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
2 3JIA9I CyKA ну зачем так придератся к девушке..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2002, 13:17:32 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
to Glory and akuz FROM mytable INNER JOIN inserted ON .... - что писать после многоточия? Просто я еще не очень разбираюсь в грамматике сиквела... Эти записи мне добавлять в уже существующий триггер? или прописать новый? То есть я добавляю в мой триггер на апдейт это все: CREATE TRIGGER [EDIT_DATE] ON [dbo].[BIBLIOTEKA] FOR Update AS update BIBLIOTEKA set Date_editing=stuff(convert(varchar(17),getdate(),113),1,11,convert(varchar(25),getdate(),104)) from BIBLIOTEKA b, inserted i where b.CD=i.CD. UPDATE BIBLIOTEKA SET editor= dbo.GETUSER() FROM BIBLIOTEKA INNER JOIN inserted ON .... и че ставить после многоточия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2002, 11:35:09 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
хорошо, у меня все получилось CREATE TRIGGER [EDIT_DATE] ON [dbo].[BIBLIOTEKA] FOR Update AS update BIBLIOTEKA set Date_editing=stuff(convert(varchar(17),getdate(),113),1,11,convert(varchar(25),getdate(),104)) from BIBLIOTEKA b, inserted i where b.CD=i.CD. UPDATE BIBLIOTEKA SET editor= dbo.GETUSER() FROM BIBLIOTEKA INNER JOIN inserted ON BIBLIOTEKA.CD=inserted.CD Правильно сделал? проверил, вроде все работает правильно. Теперь проблема в другом - на инсерт надо сделать такой-же триггер, но на инсерт срабатывает триггер вышеприведенный, то есть на апдейт который. Вот триггер на инсерт CREATE TRIGGER [INSERT_DATE] ON [dbo].[BIBLIOTEKA] FOR INSERT AS UPDATE BIBLIOTEKA SET CREATOR= dbo.GETUSER() FROM BIBLIOTEKA INNER JOIN inserted ON BIBLIOTEKA.CD=inserted.CD Как сделать чтобы срабатывал только он? а не оба одновременно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2002, 12:20:40 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
не заглядывайте просто так в тему, подскажите решение проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2002, 22:51:47 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
Во-первых, ничего проверять действительно не надо. Надо настроить права пользователей И не надо посылать пользователя к админу. Не он решает, кому можно разрешить вставку-редактирование. Это вопрос должен быть решен руководством ДО подключения пользователя к базе. Во-вторых, триггер на вставку не нужен совсем. Достаточно в default колонки date_creation указать getdate(), а в CREATOR user_id(). В-третьих, триггер на UPDATE Код: plaintext 1. 2. 3. 4. 5. 6. В четвертых, за пять дней можно было бы разобраться и самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2002, 23:40:00 |
|
||
|
Помогите с USER DEFINED FUNCTION начинающему
|
|||
|---|---|---|---|
|
#18+
спасибо, разобрался. Насчет default value в колонках - getdate у меня уже стоял, а getuser() не получалось так как надо было dbo.getuser - теперь заработало. А почему сразу не сделал, как с getdate(), - вычитал в BOL что только вроде системные функции можно туда впихивать, а getuser - это моя UDF. В общем всем спасибо, тема закрыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2002, 00:53:00 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32049276&tid=1820337]: |
0ms |
get settings: |
4ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 325ms |

| 0 / 0 |
