在Create DATABASE存储过程中创建触发器



我们有一个存储过程,可以为每个客户创建一个数据库。此存储过程在master的上下文中运行。数据库名称作为存储过程的参数传入。

我正在尝试修改存储过程以将触发器添加到表中。我知道存储过程必须切换到新的数据库才能创建触发器,所以在存储过程中添加了以下内容:

SET @str = ('USE ' + QUOTENAME (@db_name) + ' GO
CREATE TRIGGER ...')
EXEC (@str);

我得到错误

消息102,级别15,状态1,第3行
"GO"附近的语法不正确。

Msg 111,Level 15,State 1,Line 4
'REATE TRIGGER'必须是查询批处理中的第一条语句。

现在我假设第二个错误是第一个错误的结果,但如果我能找出如何在存储过程中切换数据库以创建触发器,我会大吃一惊。

我们使用的是SQL Server 2019。如何在创建数据库存储过程中创建触发器?

另一种方法是一个接一个地执行语句。

DECLARE @str VARCHAR(MAX)
DECLARE @db_name SYSNAME = 'YourDBName'
SET @str = 'USE ' + QUOTENAME (@db_name)
EXEC (@str)
SET @str = 'CREATE TRIGGER ...' 
exec (@str);

为了完整性,正如@DaleK所提到的,在Stackeexchange链接中添加了Aaron Bertnard所提到的方法

DECLARE @str VARCHAR(MAX)
DECLARE @db_name SYSNAME = 'master'
SET @str = 'EXEC '+  @db_name + '..sp_executesql @stmt=N''CREATE PROCEDURE usp_test AS SELECT 1;''' 
exec (@str);

最新更新