数据库 insert 问题
———————————————————
数据库表X 字段 基准记录如下 (比如基准记录有四条)
field1 field2 field3 field4
a 1111 2222 1
b 3333 3333 1
c 3333 3333 1
d 3333 3333 1
———————————————————
数据库表Y 字段Field1为主键
Field1
1
2
3
4
5
———————————————————
X.field4 是取自Y.field1的
现在Y.field1=2 也要添加到表X中和基准记录是一样的。SQL 语句为
Insert X(Field1,Field2,Field3,Field4) SELECT Field1, Field2, Field3, '2 ' FROM X where Field4= '1 '
Y.field1=3、Y.field1=4、Y.field1=5也添加进来要再执行上面语句三次(除了field4的参数不一样)
执行后X表如下
field1 field2 field3 field4
a 1111 2222 1
b 3333 3333 1
c 3333 3333 1
d 3333 3333 1
a 1111 2222 2
b 3333 3333 2
c 3333 3333 2
d 3333 3333 2
......
......
如果Y.field1 有100条记录就要执行上面语句100次
Y表会再增加记录或者删除记录,基准记录(原来是四条)也会增加或者删除,我的问题是:能否只要执行一次SQL语句包括存储过程就能实现
上面的功能
[解决办法]
/*Y表会再增加记录或者删除记录,基准记录(原来是四条)也会增加或者删除,我的问题是:能否只要执行一次SQL语句包括存储过程就能实现*/
--写触发器
create trigger trigname1 on Y for insert as
declare @field varchar(10)
select @field=field1 from inserted
Insert X(Field1,Field2,Field3,Field4) SELECT Field1, Field2, Field3, @field FROM X where Field4= '1 '
go
create trigger trigname2 on Y for delete as
declare @field varchar(10)
select @field=field1 from inserted
delete X where field4=@field
[解决办法]
create table X(field1 varchar(10), field2 varchar(10), field3 varchar(10), field4 int)
insert X select 'a ', '1111 ', '2222 ', 1
union all select 'b ', '3333 ', '3333 ', 1
union all select 'c ', '3333 ', '3333 ', 1
union all select 'd ', '3333 ', '3333 ', 1
create table Y(Field1 int)
insert Y select 1
union all select 2
union all select 3
union all select 4
union all select 5
Insert X(Field1,Field2,Field3,Field4)
select X.Field1, X.Field2, X.Field3, Y.Field1 from Y
cross join X
where Y.Field1 <> 1
order by Y.Field1, X.Field1
select * from X