日期:2014-05-19  浏览次数:20536 次

数据库 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