Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите повесить простенький тригер на таблицу.  [new]
mmms
Guest
Здравствуйте! Помогите повесить простенький тригер на таблицу. Есть 2 таблицы. При добавлении записи в таблицу table1, необходимо, чтобы добавилось table1.kolvo строк во вторую таблицу, под table1.rowid = table2.id_table1. Т.е. если добавили в table1 строку, где kolvo=10, в таблицу table2 должно вставится 10 строк (с любой строкой, например 'xxxxx'), под id_table1 только что вставленный IDENTITY код первой таблицы.

table1.rowid и table2.id_table1 - один ко многим.

CREATE TABLE table1 (
	rowid int IDENTITY (1, 1) NOT NULL ,
	kolvo int NOT NULL ,
	names nvarchar(50) NOT NULL ,
	opis nvarchar(250) NULL 
)

CREATE TABLE table2 (
	id_table1 int NOT NULL ,
	nvalue nvarchar(50) NOT NULL ,
)

GO

CREATE TRIGGER tgr_table1 ON table1 
FOR INSERT 
AS
???
29 мар 05, 14:50    [1423448]     Ответить | Цитировать Сообщить модератору
 Re: Помогите повесить простенький тригер на таблицу.  [new]
ChA
Member

Откуда: Москва
Сообщений: 11129
CREATE TRIGGER tgr_table1 ON table1 
FOR INSERT 
AS
INSERT table2 (id_table1, nvalue)
SELECT rowid, 'xxxx'
FROM INSERTED i
CROSS JOIN [Sequence] s
WHERE s.Number BETWEEN 1 AND i.kolvo
где [Sequence] - таблица целых чисел, например от 0 до 1000
29 мар 05, 15:13    [1423560]     Ответить | Цитировать Сообщить модератору
 Re: Помогите повесить простенький тригер на таблицу.  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
1) не есть хорошо держать таблицу без PK(это про table2)
2)для kolvo до 256
use tempdb
go
CREATE TABLE table1 (
	rowid int  PRIMARY KEY IDENTITY (1, 1) NOT NULL,
	kolvo int NOT NULL ,
	names nvarchar(50) NOT NULL ,
	opis nvarchar(250) NULL 
)
go
CREATE TABLE table2 (
	id int  PRIMARY KEY IDENTITY (1, 1) NOT NULL ,
	id_table1 int NOT NULL ,
	nvalue nvarchar(50) NOT NULL ,
)
go
create trigger tr123 on table1
for insert 
as
begin
set nocount on
 insert into table2(id_table1,nvalue)
 select rowid,names+'_'+cast(t2.number+1 as varchar(3)) from inserted t1
  join (select number from master..spt_values where type='P') t2
   on t1.kolvo>t2.number
end
go
insert into table1(kolvo,names) values(1,'one')
insert into table1(kolvo,names)
select 2,'two' union
select 3,'three' 
select id_table1,nvalue from table2
GO
drop table table1
drop table table2
29 мар 05, 15:20    [1423589]     Ответить | Цитировать Сообщить модератору
 Re: Помогите повесить простенький тригер на таблицу.  [new]
Taffy
Member

Откуда:
Сообщений: 20501
vspom - вспомогательная таблица где value - int c числами по порядку от 1 и далее (рекомендуется иметь в базе)

CREATE TRIGGER tgr_table1 ON table1 
FOR INSERT 
AS

insert into table2 (id_table1, nvalue)
select i.rowguid, 'xxxx'
from inserted i inner join
       vspom v on i.kolvo <=v.value
29 мар 05, 15:26    [1423609]     Ответить | Цитировать Сообщить модератору
 Re: Помогите повесить простенький тригер на таблицу.  [new]
mmms
Guest
Спасибо большое всем ответившим!

не есть хорошо держать таблицу без PK(это про table2)
Есть связь, один ко многим, я написал. Особенно интересно с master..spt_values, почитать бы где про эти процедуры, кроме встроенной справки, не пришлось бы писать горы лишнего кода :)
29 мар 05, 16:12    [1423802]     Ответить | Цитировать Сообщить модератору
 Re: Помогите повесить простенький тригер на таблицу.  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
master..spt_values - это табличка системно-вспомогательная, она всегда там есть и всегда одинаковая
29 мар 05, 16:56    [1424024]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить