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 INSERT, UPDATE, DELETE
AS
print('1111111111')
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
說明: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 INSERT, UPDATE, DELETE
AS
print('1111111111')
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
1,trigger中可以調用procedure.而procedure中不可以調用tiegger
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。