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

Откуда: Железнодорожный
Сообщений: 1842
Блог
Всем доброго настроения.

select @@version
----------------
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)   Mar 29 2009 10:27:29   Copyright (c) 1988-2008 Microsoft Corporation  Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3) 

Вот с талкнулся с такой ситуацией. Есть поля в таблицах
alter table dbo.Position
add Created datetime not null default GETDATE(),
    CreateBy nvarchar(256) not null default SUSER_SNAME(),
    Modified datetime,
    ModifiedBy nvarchar(256)
go

с Created и CreateBy проблем не возникает. А вот как бы занести данные в два последних поля (Modified, ModifiedBy) при обновлении строк?
Хотел через триггер, но при for update таблици updated. да и с триггерами плотно не работал чесно говоря (читаю BOL, и книгу "Программирование Баз данных SQL Server 2005. Базовый курс"). В процедуре не очень хочется это реализовывать т.к. могу попасться таблицы с этими полями, но у них не будет процедур и функций.
Может подскажете как можно обновлять поля при обновлении? Может через проверку как нить?

С Уважением gds.
Одна из основных проблем человека - проблема выбора.
27 авг 09, 17:20    [7587721]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Хотел через триггер, но при for update таблици updated.


И делайте треггером. Только апдейте саму базовую таблицу.
27 авг 09, 17:23    [7587738]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
pkarklin
автор
Хотел через триггер, но при for update таблици updated.


И делайте треггером. Только апдейте саму базовую таблицу.

Вы это имели ввиду?
CREATE TRIGGER dbo.trgAddressesFU 
   ON  dbo.Addresses
   after update
AS 
BEGIN	
	update dbo.Addresses
	set Modified = GETDATE(),
		ModifiedBy = SUSER_SNAME()
		where AddrID in (select AddrID from inserted)
END
GO
Я вообще хотел что нить в таком духе.
CREATE TRIGGER dbo.trgAddressesFU 
   ON  dbo.Addresses
   after update
AS 
BEGIN	
	update inserted
	set Modified = GETDATE(),
		ModifiedBy = SUSER_SNAME()
END
GO
Но ругается
Msg 286, Level 16, State 1, Procedure trgAddressesFU1, Line 6
Не удалось обновить логические таблицы INSERTED и DELETED.
27 авг 09, 18:10    [7587959]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а их и нельзя апдейтить вообщем
-------------------------------------
Jedem Das Seine
27 авг 09, 18:12    [7587971]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
gds
Я вообще хотел что нить в таком духе.
CREATE TRIGGER dbo.trgAddressesFU 
   ON  dbo.Addresses
   for update
AS 
BEGIN	
	update inserted
	set Modified = GETDATE(),
		ModifiedBy = SUSER_SNAME()
END
GO
Но ругается
Msg 286, Level 16, State 1, Procedure trgAddressesFU1, Line 6
Не удалось обновить логические таблицы INSERTED и DELETED.

Опечатка постом выше правильно
   for update

27 авг 09, 18:12    [7587973]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
gds
А вот как бы занести данные в два последних поля (Modified, ModifiedBy) при обновлении строк?
А как Вы делаете это самое обновление строк?
Посредством соответствующих хранимок, верно?
Так почему бы не "занести данные в два последних поля" в этих же самых хранимках?
27 авг 09, 18:12    [7587975]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Паганель
gds
А вот как бы занести данные в два последних поля (Modified, ModifiedBy) при обновлении строк?
А как Вы делаете это самое обновление строк?
Посредством соответствующих хранимок, верно?
Так почему бы не "занести данные в два последних поля" в этих же самых хранимках?

Нет, ни всегда, они у меня стоят в default первые. может быть таблица без хранимок. просто за ненадобностью. Если бы через хранимки я бы не спрашивал.
27 авг 09, 18:15    [7587985]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
gds
может быть таблица без хранимок. просто за ненадобностью
то есть с некоторыми таблицами Вы работаете посредством хранимок, а с некоторыми - напрямую ?
хм, не понимаю...неужели так удобно...
27 авг 09, 18:20    [7588011]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Паганель
gds
может быть таблица без хранимок. просто за ненадобностью
то есть с некоторыми таблицами Вы работаете посредством хранимок, а с некоторыми - напрямую ?
хм, не понимаю...неужели так удобно...

Ну некоторые таблицы, например "статусы" очерь резко редактируются и то только на начальном этапе. Хотя конечно может вы и правы стоит сделать хранимку и использовать её.
Но тогда если кто шипко умный захочет через квери анализер или еще чего нить сделать update напрямую то тут уж непонятно будет.
28 авг 09, 10:14    [7589157]     Ответить | Цитировать Сообщить модератору
 Re: Где лучше организовать вставку значений при update.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
gds
Но тогда если кто шипко умный захочет
Сделать так, чтобы никто не захотел (а если захотел - чтобы не получил доступа на сервер) - это скорее организационные вопросы
Имхо организационные проблемы программным путем не решаются
28 авг 09, 10:23    [7589195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить