Trigger&Procedure的應用

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tg_user_add]'and OBJECTPROPERTY(id, N'IsTrigger'= 1)
drop trigger [dbo].[tg_user_add]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tg_user_edit]'and OBJECTPROPERTY(id, N'IsTrigger'= 1)
drop trigger [dbo].[tg_user_edit]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tg_test]'and OBJECTPROPERTY(id, N'IsTrigger'= 1)
drop trigger [dbo].[tg_test]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_output]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
drop procedure [dbo].[sp_output]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_output_return]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
drop procedure [dbo].[sp_output_return]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_return]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
drop procedure [dbo].[sp_return]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test_output]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
drop procedure [dbo].[test_output]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test_output_return]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
drop procedure [dbo].[test_output_return]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test_return]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
drop procedure [dbo].[test_return]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
drop table [dbo].[user]
GO

CREATE TABLE [dbo].[user] (
    
[id] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    
[name] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    
[ename] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    
[email] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    
[tel] [varchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL 
ON [PRIMARY]
GO

ALTER TABLE [dbo].[user] WITH NOCHECK ADD 
    
CONSTRAINT [PK_user] PRIMARY KEY  CLUSTERED 
    (
        
[id]
    )  
ON [PRIMARY] 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE PROCEDURE [dbo].[sp_output]
(
   
@i char(1)='1',
   
@a varchar(5)=null output
)
 
AS
begin
  
if(@i='1')
    
set @a='aaaaa'
  
else
    
set @a='bbbbb'
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE PROCEDURE [dbo].[sp_output_return]
(
   
@i char(1)='1',
   
@a varchar(5)=null output
)
 
AS
begin
  
if(@i='1')
  
begin
    
set @a='aaaaa'
    
return 1
  
end
  
else
  
begin
    
set @a='bbbbb'
    
return 0
  
end
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE PROCEDURE [dbo].[sp_return]
(
   
@i char(1)='1'
)
 
AS
begin
  
/*
  --return只能返回一個int類型的值,相反output則可以傳回更多類型的值
  無條件退出查詢或程序。RETURN 是立即而完整的,而且可在任何時刻用於退出程序、批次,或陳述式封鎖。
  其中附隨有 RETURN 的陳述式不會被執行。
  
*/
  
  
if(@i='1')
    
return 1
  
else
    
return 0
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE PROCEDURE [dbo].[test_output]
(
  
@i char(1)='1'
)
 
AS
begin
  
declare @b varchar(5)
  
exec sp_output @i,@b output
  
--exec @b=sp_output @i,@b output
  print @b
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE PROCEDURE [dbo].[test_output_return]
(
  
@i char(1)='1'
)
 
AS
begin
  
declare @b int
  
declare @a varchar(5)
  
exec @b=sp_output_return @i,@a output
  
print(@a)
  
print(@b)
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE PROCEDURE [dbo].[test_return]
(
  
@i char(1)='1'
)
 
AS
begin
  
declare @b varchar(5)
  
exec @b=sp_return @i
  
if (@b=1)
    
print('aaaaa')
  
else
    
print('bbbbb')
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

CREATE TRIGGER [tg_user_add] ON [dbo].[user] 
FOR INSERT 
AS
begin
  
declare @id char(10)
  
declare @name varchar(10)
  
declare @ename varchar(50)
  
declare @email varchar(50)
  
declare @tel varchar(20)
  
declare @sql varchar(500)
  
declare user_cr cursor for  select [id],[name],[ename],[email],[tel] from inserted
  
open user_cr
  
fetch next from user_cr
  
into @id,@name,@ename,@email,@tel
  
while @@fetch_status=0
  
begin
    
set @sql='insert into [user] (id,name,ename,email,tel) values (''' + @id + ''',''' + @name + ''',''' + @ename + ''',''' + @email + ''',''' + @tel + ''')'
    
print(@sql)
    
fetch next from user_cr
    
into @id,@name,@ename,@email,@tel
  
end
  
close user_cr
  
deallocate user_cr
  
select * from deleted
  
select * from inserted
end





GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

CREATE TRIGGER [tg_user_edit] ON [dbo].[user] 
FOR update
AS
begin
  
declare @id char(10)
  
declare @name varchar(10)
  
declare @ename varchar(50)
  
declare @email varchar(50)
  
declare @tel varchar(20)
  
declare @sql varchar(500)
  
declare user_cr cursor for  select [id],[name],[ename],[email],[tel] from inserted
  
open user_cr
  
fetch next from user_cr
  
into @id,@name,@ename,@email,@tel
  
while @@fetch_status=0
  
begin
    
set @sql='insert into [user] (id,name,ename,email,tel) values (''' + @id + ''',''' + @name + ''',''' + @ename + ''',''' + @email + ''',''' + @tel + ''')'
    
print(@sql)
    
fetch next from user_cr
    
into @id,@name,@ename,@email,@tel
  
end
  
close user_cr
  
deallocate user_cr
  
select * from deleted
  
select * from inserted
  
exec test_output_return
end





GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

CREATE TRIGGER [tg_test] ON [dbo].[user] 
FOR INSERTUPDATEDELETE 
AS
  
print('1111111111')
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

說明:
1,trigger中可以調用procedure.而procedure中不可以調用tiegger

申明

非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

博文欢迎转载,但请给出原文连接。

原文地址:https://www.cnblogs.com/Athrun/p/1216733.html