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

Create trigger in CREATE DATABASE stored procedure

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

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

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

我收到错误

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'GO'.

Msg 111, Level 15, State 1, Line 4
'CREATE TRIGGER' must be the first statement in a query batch.

现在我假设第二个错误是第一个错误的结果,但如果我能弄清楚如何在存储过程中切换数据库以创建触发器,我会感到很震惊。

我们正在使用 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 所述,添加 the approach mentioned by Aaron Bertnard in the Stackexchange link

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);