如何在特定数据库中创建存储过程

How create stored procedure in specific database

我想在使用变量名创建数据库时创建存储过程。

为了创建我的数据库,我在脚本的顶部写了 USE [master] GO

在我想在我的新数据库中创建我的存储过程之后,我不能像这样在我的查询中指定数据库:

DECLARE @DB_NAME sysname
select @DB_NAME = valeur from #vars WHERE nom = 'DB_NAME'   /*Nom de la base de données*/

SET @SqlCommand = 'CREATE PROCEDURE '+ @DB_NAME +'.[dbo].[sp_DEFRAG_Index]

@Pourcent int  = 30.0

AS BEGIN

错误:

Msg 166, Level 15, Status 1, Line 317

'CREATE/ALTER PROCEDURE' does not allow specifying the database name as a prefix to the object name.

您可以动态调用sp_executesql,即:您可以创建一个包含'DB_NAME.sys.sp_executesql的值然后调用EXEC @name @params

DECLARE @DB_NAME sysname;
select @DB_NAME = valeur
from #vars
WHERE nom = 'DB_NAME';   /*Nom de la base de données*/

DECLARE @SqlCommand nvarchar(max) = '
CREATE PROCEDURE [dbo].[sp_DEFRAG_Index]

@Pourcent int  = 30.0

AS
';

DECLARE @spexecute nvarchar(1000) = QUOTENAME(@DB_NAME) + '.sys.sp_executesql';

EXEC @spexecute @SqlCommand;