脚本中怎样在满足某个if条件情况下执行多条“创建触发器”语句?

TheGodOfGods 2010-10-12 12:28:42
有以下事务,在表config中TableVer小于2的情况下,创建两触发器,并更新TableVer值
但问题是,触发器创建语句只能是批处理的第一句话才能正确运行,所以没办法把两个语句同时放到一个if条件语句中执行
想请问有什么别的办法能实现吗? 不胜感激!


begin transaction

/*设定当前版本(版本递增)*/
declare @NewVersion_20101012_1 int;
set @NewVersion_20101012_1 = 10;
/*第一次更新,版本可能为空*/
if ( @NewVersion_20101012_1 > (select TableVer from config where ID = 1 ) or
@NewVersion_20101012_1 > ISNULL((select TableVer from config where ID = 1),0) )
begin
update config set TableVer = TableVer where ID = 1;
-- 加go的话编译出错
-- CREATE TRIGGER [dbo].[TriTable1Insert]
-- ON [dbo].[Nums]
-- FOR INSERT
-- AS
-- BEGIN
-- ...
-- END
--go
--CREATE TRIGGER [dbo].[TriTable1Insert2]
-- ON [dbo].[Nums]
-- FOR INSERT
-- AS
-- BEGIN
-- ...
-- END
/*更新版本*/
update config set TableVer = @NewVersion_20101012_1 where ID = 1;
end

/*如果有出错就回滚*/
if(@@error<>0)
begin
rollback transaction
end
/*提交*/
commit transaction
...全文
276 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheGodOfGods 2010-10-12
  • 打赏
  • 举报
回复
3,4楼正解。
SQL2088 2010-10-12
  • 打赏
  • 举报
回复
改用动态的

alter proc pppp
as
declare @s1 varchar(1001),@s2 varchar(1001)

set @s1=' CREATE TRIGGER [dbo].[tr1]
ON [dbo].tb1
FOR INSERT
AS
BEGIN
print ''a''
END'

set @s2='
CREATE TRIGGER [dbo].[tr2]
ON [dbo].tb2
FOR INSERT
AS
BEGIN
print ''b''
END'

exec(@s1)
exec(@s2)
print 'c'
go

exec pppp

select name from sysobjects where xtype='tr'
name
--------------------------------------------------------------------------------------------------------------------------------
tr1
tr2

(2 行受影响)

drop trigger tr1
drop trigger tr2
SQLCenter 2010-10-12
  • 打赏
  • 举报
回复
哦,理解错误,这个需求要用exec

exec ('CREATE TRIGGER [dbo].[TriTable1Insert]....')
SQLCenter 2010-10-12
  • 打赏
  • 举报
回复
关联这两个表 inserted/deleted 批量处理
jwdream2008 2010-10-12
  • 打赏
  • 举报
回复
直接创建触发器就可以了,为何非要放在存储过程中!

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧