在 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);
我们有一个存储过程,可以为每个客户创建一个数据库。此存储过程在 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);