怎么写触发器和存储过程/函数??????
有两个表,一个存储位置参数表:
CREATE TABLE T_PUB_CCWZCS
   (
    N_GH tinyint PRIMARY KEY,//柜号(2位)
    N_ZGCS tinyint,//总共层数(2位)
    N_KFHS tinyint,//可放盒数(2位)
    N_KFPS tinyint,//可放盘数(3位)
   )存储位置表:
CREATE TABLE T_GPGL_CCWZ
   (
    C_CCWZID varchar(8) 主键,形式:(01-01-01)柜号(2位)+层号(2位)+盒号(2位)
    N_GH tinyint,  //柜号(2位)
    N_CH tinyint,  //层号(2位)
    N_HH tinyint,  //盒号(2位)
    N_YS tinyint,  //余数  (默认值是盒子子的容量)
   )CREATE TRIGGER MyfirstTrigger ON _PUB_CCWZCS
AFTER  INSERT
AS
   .........
怎么创建一个触发器(或都别的方法也行),做到如下功能:
当:
insert into T_PUB_CCWZCS //存储位置参数表
values(1,3,2,120);
之后马上:
insert into T_PUB_CCWZ   //存储位置表
values(01-01-01,1,1,1,120);
insert into T_PUB_CCWZ
values(01-01-02,1,1,2,120);
insert into T_PUB_CCWZ
values(01-02-01,1,2,1,120);
insert into T_PUB_CCWZ
values(01-02-02,1,2,2,120);
insert into T_PUB_CCWZ
values(01-03-01,1,3,1,120);
insert into T_PUB_CCWZ
values(01-03-02,1,3,2,120);
当:
delete from T_PUB_CCWZCS where N_GH=1 //存储位置参数表
之后马上:
删除上面的记录!!每当在into T_PUB_CCWZCS表中增加一条记录都会在存储位置表中增加该柜子的所有存储位置记录,
每当在into T_PUB_CCWZCS表中增加删除一订记录都会在存储位置表中删除该柜子的所有存储位置记录,
怎么写触发器和存储过程/函数??????
关于insert相关的下面的怎么改写就可以了????
CREATE TRIGGER MyfirstTrigger ON _PUB_CCWZCS
AFTER  INSERT
AS
declare @i int,@j int,@t int;
select @i=N_ZGCS,@t=N_KFHS from inserted;
while @i>0
begin
  set @j=@t;
  while @j>0
  begin
    insert into T_GPGL_CCWZ(C_CCWZID,N_GH,N_CH,N_HH,N_YS) select N_GH+'-'+@i+'-'+@j,N_GH,@i,@j,N_KFPS from inserted;
    set @j=@j-1
  end
  set @i=@i-1
end
[size=14px]怎么写触发器和存储过程/函数??????

解决方案 »

  1.   

    --触发器的操作1create table 化验室纱组(本厂编号 int,客户 int,色号 int,纱支 int)
    create table 化验室布组(本厂编号 int,客户 int,色号 int,布类 int)
    go
    create trigger my_trig on 化验室纱组 for insert ,update ,delete
    as
    if not exists(select 1 from inserted)
       delete 化验室布组 from deleted t where 化验室布组.本厂编号 = t.本厂编号 
    else if not exists(select 1 from deleted) 
       insert into 化验室布组(本厂编号 ,客户 ,色号) select 本厂编号 ,客户 ,色号 from inserted
    else
       update 化验室布组 set 客户 = t.客户 , 色号 = t.色号 from inserted t where 化验室布组.本厂编号 = t.本厂编号
    go--1、insert 对化验室纱组插入数据,然后查看化验室布组表的数据
    insert into 化验室纱组 values(1 , 2 , 3 , 4)
    insert into 化验室纱组 values(5 , 6 , 7 , 8)
    go
    select * from 化验室布组
    /*
    本厂编号        客户          色号          布类          
    ----------- ----------- ----------- ----------- 
    1           2           3           NULL
    5           6           7           NULL(所影响的行数为 2 行)
    */--2、update , 更改化验室纱组表中本厂编号=1的色号=6
    update 化验室纱组 set 色号 = 6 where 本厂编号 = 1
    go
    select * from 化验室布组
    /*
    本厂编号        客户          色号          布类          
    ----------- ----------- ----------- ----------- 
    1           2           6           NULL
    5           6           7           NULL(所影响的行数为 2 行)
    */--3、delete 化验室纱组表中本厂编号=1的那条数据
    delete from 化验室纱组 where 本厂编号 = 1
    go
    select * from 化验室布组
    /*
    本厂编号        客户          色号          布类          
    ----------- ----------- ----------- ----------- 
    5           6           7           NULL(所影响的行数为 1 行)
    */drop table 化验室纱组 , 化验室布组
      

  2.   

    触发器中怎么定义char类型的变量啊?
      

  3.   


    IF OBJECT_ID('T_PUB_CCWZCS') IS NOT NULL 
        DROP TABLE T_PUB_CCWZCS
    Go
    CREATE TABLE T_PUB_CCWZCS
       (N_GH tinyint PRIMARY KEY,--//柜号
        N_CS tinyint,--//层数
        N_HS tinyint,--//盒数
        N_PS tinyint,--//容量   
    )
    IF OBJECT_ID('T_GPGL_CCWZ') IS NOT NULL 
        DROP TABLE T_GPGL_CCWZ
    Go
    CREATE TABLE T_GPGL_CCWZ
       (    ID int IDENTITY (1, 1) NOT NULL,
        N_GH varchar(20),  --//柜号
        N_CH tinyint,  --//层号
        N_HH tinyint,  --//盒号
        N_YS tinyint,  --//余数  (默认值是盒子子的容量)   )
    )if object_id('gg') is not null drop trigger gg
    go
    create trigger gg on T_PUB_CCWZCS
    for insert 
    as
      declare @n int,@m int,@cs int,@hs int
      set @cs=(select N_CS from inserted)
      set @hs=(select N_HS from inserted)  set @n=1
      set @m=1
      while @n<=@cs
    begin
    while @m<=@hs
     begin
     insert T_GPGL_CCWZ
     select right('0'+ltrim(N_GH),2)+'-'+right('0'+ltrim(@n),2)+'-'+right('0'+ltrim(@m),2),@n,@m,N_PS FROM inserted
     set @m=@m+1  
     end
     
    set @n=@n+1
    set @m=1
    end
    go------------------------
    insert into T_PUB_CCWZCS values(1,3,2,120) select * from T_GPGL_CCWZID          N_GH                 N_CH N_HH N_YS
    ----------- -------------------- ---- ---- ----
    1           01-01-01             1    1    120
    2           01-01-02             1    2    120
    3           01-02-01             2    1    120
    4           01-02-02             2    2    120
    5           01-03-01             3    1    120
    6           01-03-02             3    2    120(6 行受影响)
      

  4.   


    ---插入和删除IF OBJECT_ID('T_PUB_CCWZCS') IS NOT NULL 
        DROP TABLE T_PUB_CCWZCS
    Go
    CREATE TABLE T_PUB_CCWZCS
       (N_GH tinyint PRIMARY KEY,--//柜号
        N_CS tinyint,--//层数
        N_HS tinyint,--//盒数
        N_PS tinyint,--//容量   
    )
    IF OBJECT_ID('T_GPGL_CCWZ') IS NOT NULL 
        DROP TABLE T_GPGL_CCWZ
    Go
    CREATE TABLE T_GPGL_CCWZ
       (    ID int IDENTITY (1, 1) NOT NULL,
        N_GH varchar(20),  --//柜号
        N_CH tinyint,  --//层号
        N_HH tinyint,  --//盒号
        N_YS tinyint,  --//余数  (默认值是盒子子的容量)   )
    )if object_id('gg') is not null drop trigger gg
    go
    create trigger gg on T_PUB_CCWZCS
    for insert ,delete
    as
    if not exists(select 1 from deleted) ------- 插入
    begin
      declare @n int,@m int,@cs int,@hs int
      set @cs=(select N_CS from inserted)
      set @hs=(select N_HS from inserted)   set @n=1
      set @m=1
      while @n<=@cs
    begin
    while @m<=@hs
     begin
     insert T_GPGL_CCWZ
     select right('0'+ltrim(N_GH),2)+'-'+right('0'+ltrim(@n),2)+'-'+right('0'+ltrim(@m),2),@n,@m,N_PS FROM inserted
     set @m=@m+1  
     end
     
    set @n=@n+1
    set @m=1
    end
    end 
    else ----删除
    begin
    delete a 
    from T_GPGL_CCWZ a,deleted d
    where cast(left(a.N_GH,2)as int)=d.N_GH
    endgo------------------------
    insert into T_PUB_CCWZCS values(1,3,2,120)insert into T_PUB_CCWZCS values(2,2,2,120) select * from T_GPGL_CCWZID          N_GH                 N_CH N_HH N_YS
    ----------- -------------------- ---- ---- ----
    1           01-01-01             1    1    120
    2           01-01-02             1    2    120
    3           01-02-01             2    1    120
    4           01-02-02             2    2    120
    5           01-03-01             3    1    120
    6           01-03-02             3    2    120
    7           02-01-01             1    1    120
    8           02-01-02             1    2    120
    9           02-02-01             2    1    120
    10          02-02-02             2    2    120
    delete from T_PUB_CCWZCS  where N_GH=1
    select * from T_GPGL_CCWZID          N_GH                 N_CH N_HH N_YS
    ----------- -------------------- ---- ---- ----
    7           02-01-01             1    1    120
    8           02-01-02             1    2    120
    9           02-02-01             2    1    120
    10          02-02-02             2    2    120(4 行受影响)
      

  5.   

    delete对T_GPGL_CCWZ表的记录似乎没有影响啊??
      

  6.   

    哦,我for后面写掉了delete,谢谢了,js_szy!!!