在多个库上批量创建触发器

-------- 创建测试库及测试表 ----------
USE [master]
GO
--创建测试库
IF EXISTS(SELECT 1 FROM sys.databases AS d WHERE d.name='db1')
	DROP DATABASE db1
GO
IF EXISTS(SELECT 1 FROM sys.databases AS d WHERE d.name='db2')
	DROP DATABASE db2
GO
CREATE DATABASE db1
GO
CREATE DATABASE db2
GO
CREATE TABLE db1.dbo.t(id INT)
CREATE TABLE db2.dbo.t(id INT)
GO
-------- 创建测试库及测试表完毕 ----------

-- 1. master 库上增加创建触发器的存储过程
-- 创建触发器脚本你自己修改……
USE [master]
GO
IF OBJECT_ID('dbo.Proc_CreateTrigger') IS NOT NULL
DROP PROC dbo.Proc_CreateTrigger
GO
CREATE PROC Proc_CreateTrigger
@dbName NVARCHAR(200)
AS
BEGIN
	DECLARE @sql NVARCHAR(MAX),@sql2 NVARCHAR(MAX)
	SET @sql='create trigger dbo.trig_t_I
on t
for insert
as
BEGIN
	select * from inserted
END'
	SET @sql2='use '+@dbName+' EXEC('' '+@sql+' '') '
	PRINT @sql2
	EXEC (@sql2)
END
GO

--遍历所有 db 开头,后面带一个数字 的库(如何选择库,你自己根据需要改一下)
--如果没有 trig_t_I 触发器的,为其加上
EXEC sp_MSforeachdb 'if "?" like "db[0-9]" and object_id(''?.dbo.trig_t_I'') is null 
begin
	EXEC master.dbo.Proc_CreateTrigger ''?'' 
end
'
USE db1
INSERT INTO t VALUES (1)

USE db2
INSERT INTO t VALUES (2)

/*
id
1

id
2
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值