首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql server2000触发器有关问题

2012-12-16 
sql server2000触发器问题同一数据库有表a,表b;a表字段结构:编号(int)名称(varchar(20)) 委托单号(varchar

sql server2000触发器问题
同一数据库有表a,表b;
a表字段结构:编号(int)  名称(varchar(20)) 委托单号(varchar(20)) 手机(varchar(11)) 状态(varchar(10))
               1          a1                  N001               13812345678         在检
               2          a2                  N001               13812345678         完检
               3          b11                 N005               13887654321         完检
               4          b12                 N005               13887654321         完检
               5          c1                  N005               13887654321         完检
               6          b111                N123               13887654320         完检

b表字段结构:id(int)     委托单号(varchar(20))   手机(varchar(11)) 
  

现在要求在a表写一触发器,相同委托单号的记录,如果状态均为‘完检’则将a表中的委托单号和手机写入b表中
上例的依据a表记录要求得到的b表记录如下
委托单号    手机
N005       13887654321
N123       13887654320                  


         
[最优解释]

create trigger tri_insert 
on [9DEC_goods]
for insert
as
begin
declare @id varchar(300),@num int,@num2 int
set @num=0
set @num2=0
select @id=委托单号 from inserted
select @num=count(1) from 表a where 委托单号=@id 
select @num2=count(1) from 表a where 委托单号=@id and 状态='完检'
if @num != 0
begin
 if @num=@num2
begin
--插入表2
end 
end

end 


------其他解决方案--------------------


--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO 
CREATE TABLE [tb]([编号] INT,[名称] VARCHAR(4),[委托单号] VARCHAR(4),[手机] BIGINT,[状态] VARCHAR(4))
INSERT [tb]
SELECT 1,'a1','N001',13812345678,'在检' UNION ALL
SELECT 2,'a2','N001',13812345678,'完检' UNION ALL
SELECT 3,'b11','N005',13887654321,'完检' UNION ALL
SELECT 4,'b12','N005',13887654321,'完检' UNION ALL
SELECT 5,'c1','N005',13887654321,'完检' UNION ALL
SELECT 6,'b111','N123',13887654320,'完检'
--------------开始查询--------------------------

SELECT * FROM [tb] AS t,INSERTED AS i where a.[委托单号]=i.[委托单号]
 WHERE NOT EXISTS 
(SELECT 1 FROM [tb] WHERE [委托单号]=t.[委托单号] AND [状态]='在检')
----------------结果----------------------------
/* 
*/


CREATE TRIGGER tt ON a
       FOR INSERT , UPDATE
AS
BEGIN 
--判断是否符合条件
      IF EXISTS ( SELECT  *
                  FROM    [a] AS t ,
                          INSERTED AS i
                  WHERE   t.[委托单号] = i.[委托单号]
                          AND NOT EXISTS ( SELECT 1
                                           FROM   [a]
                                           WHERE  [委托单号] = t.[委托单号]
                                                  AND [状态] != '完检' ) ) 
         BEGIN
    --判断b表是否已存在
               IF NOT EXISTS ( SELECT *
                               FROM   [b] ,
                                      INSERTED AS i
                               WHERE  b.[委托单号] = i.[委托单号] ) 
                  BEGIN


                        INSERT  INTO b
                                SELECT  委托单号 , 手机
                                FROM    INSERTED 
                  END
         END
END


[其他解释]
CREATE TRIGGER T_INS ON A
FOR INSERT
AS
BEGIN
   INSERT INTO B ( 委托单号,手机)
   SELECT  委托单号,手机 FROM INSERTED A WHERE 状态='完检'AND NOT EXISTS(SELECT 手机  FROM B WHERE 委托单号=A.委托单号 AND 手机=A.手机 ) GROUP BY 委托单号,手机
END

[其他解释]
#3正解
[其他解释]
各位大神 谁有视频教程啊
[其他解释]
我擦  我写的没回复上啊

shit~~~~~~~~~~~~~~~~~~~~~~~~~~~
[其他解释]
我擦  我写的没回复上啊

shit~~~~~~~~~~~~~~~~~~~~~~~~~~~
[其他解释]
引用:
SQL code
CREATE TRIGGER T_INS ON A
FOR INSERT
AS
BEGIN
   INSERT INTO B ( 委托单号,手机)
   SELECT  委托单号,手机 FROM INSERTED A WHERE 状态='完检'AND NOT EXISTS(SELECT 手机  FROM B WHERE 委托单号=A.委托单号 AND 手机=A.手机 ……

测试貌似不对

热点排行