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

Откуда:
Сообщений: 566
Добрый день!
Подскажите, пожалуйста...
мне необходимо при вставке строки генерировать определенное поле в той же строке в зависимости от поля ID (IDENTITY,инкрементальное).
Как лучше сделать.
CREATE TRIGGER [dbo].[Contact_Insert]
ON [dbo].Contact For Insert
AS
BEGIN
????GUID='20'+'12'+ID +'00'
или через Update
END
Спасибо.
27 дек 12, 12:12    [13694188]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
qwerty112
Guest
Lexx_SQL
Добрый день!
Подскажите, пожалуйста...
мне необходимо при вставке строки генерировать определенное поле в той же строке в зависимости от поля ID (IDENTITY,инкрементальное).
Как лучше сделать.
CREATE TRIGGER [dbo].[Contact_Insert]
ON [dbo].Contact For Insert
AS
BEGIN
????GUID='20'+'12'+ID +'00'
или через Update
END
Спасибо.

и ты пробовал так делать ?
27 дек 12, 12:25    [13694274]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
AnaceH
Member

Откуда:
Сообщений: 109
Lexx_SQL,

Если поле строится только на основании полей этой таблицы, то лучше использовать computed column.
27 дек 12, 12:26    [13694287]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
qwerty112,

GUID='20'+'12'+ID +'00'
Incorrect syntax near 'GUID'.
27 дек 12, 12:29    [13694312]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
AnaceH,
Поле строится на основании поля ID этой ж строки, который создается при вставке строки.
Если можно, приведите пример.
27 дек 12, 12:35    [13694351]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Lexx_SQL
Incorrect syntax near 'GUID'.


Как это ни печально, но придеться начать изучать синтаксис.
27 дек 12, 12:35    [13694353]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Lexx_SQL
Если можно, приведите пример.


BOL->Multirow Considerations for DML Triggers-> Example A
27 дек 12, 12:37    [13694368]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
pkarklin,

пример для вставки данных в другую таблицу конечно полезен. Вопрос в другом, могу ли я использовать данные (ID) при самой операции вставке, ID ж формируется тоже при вставке.
27 дек 12, 12:49    [13694437]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
iiyama
Member

Откуда:
Сообщений: 642
Lexx_SQL,
Я понимаю что BOL читать лень, но накидать то пример и посмотреть пару минут
create table tmp_t1 (id int identity(1,1), myguid varchar(36), blablabla varchar(max))
go
create trigger test_trigger on tmp_t1 after insert
as
update tmp_t1
set myguid=CONVERT(char(8) , getdate(), 112)+'-'+CAST(i.id as varchar(10))
from  tmp_t1 T1 join inserted i on T1.id = i.id

go
insert into tmp_t1(blablabla) values('qwerty'), ('asdfgh'), ('zxcvbn') 
select * from tmp_t1
go
drop table  tmp_t1
27 дек 12, 13:15    [13694637]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Lexx_SQL
пример для вставки данных в другую таблицу конечно полезен. Вопрос в другом, могу ли я использовать данные (ID) при самой операции вставке, ID ж формируется тоже при вставке.


Вам надо припасть к азам T-SQL, ибо указанный мной пример это не "вставка данных в другую таблицу":

USE AdventureWorks2008R2;
GO
CREATE TRIGGER NewPODetail
ON Purchasing.PurchaseOrderDetail
AFTER INSERT AS
   UPDATE PurchaseOrderHeader
   SET SubTotal = SubTotal + LineTotal
   FROM inserted
   WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID ;


а пример триггера в котором происходит вычисление значения одного поля с использованием значений другого.
27 дек 12, 13:21    [13694682]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Lexx_SQL,

В триггере можно делать так
UPDATE c
SET GUID = '20'+'12'+i.ID +'00'
FROM dbo.Contract c
     INNER JOIN inserted i ON i.ID = c.ID


Это если у вас поле ID имеет символьный тип, в чём я почему-то сомневаюсь.

Вычисляемый столбец выглядит примерно так :
ALTER TABLE dbo.Contact ADD GUID1 AS '20'+'12'+ID +'00'
27 дек 12, 13:21    [13694686]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на вставку-генерация значение при вставке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
Lexx_SQL
Вопрос в другом, могу ли я использовать данные (ID) при самой операции вставке, ID ж формируется тоже при вставке.
Триггер - это хранимая процедура, выполняемая после вставки, все записи в таблице к этому моменту уэже есть.
27 дек 12, 14:36    [13695321]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить