Lam*_*s84 28 t-sql sql-server stored-procedures
我需要创建一个存储过程,在多个数据库中创建一个用户.像这样的东西:
USE [database1]
CREATE USER [userLogin] FOR LOGIN [userLogin]
USE [database2]
CREATE USER [userLogin] FOR LOGIN [userLogin]
Run Code Online (Sandbox Code Playgroud)
由于该CREATE USER语句在当前数据库中完成了他的工作,我需要使用该USE语句在数据库之间进行更改,但它不能在存储过程中使用.
我怎样才能做到这一点?
gbn*_*gbn 25
动态SQL
CREATE PROCEDURE spTestProc
AS
EXEC ('USE [database1]; CREATE USER [userLogin] FOR LOGIN [userLogin]')
EXEC ('USE [database2]; CREATE USER [userLogin] FOR LOGIN [userLogin]')
GO
Run Code Online (Sandbox Code Playgroud)
SQL Server为我们提供了一个系统存储过程来执行此操作.我的理解是推荐的方法是使用sys.sp_grantdbaccess:
CREATE PROCEDURE usp_CreateTwoUSers
AS
BEGIN
-- Create a user for a login in the current DB:
Exec sp_grantdbaccess [userLogin], [name_in_db];
-- Create a user for a login in an external DB:
Exec ExternalDatabaseName.sys.sp_grantdbaccess [userLogin], [name_in_db];
END
Run Code Online (Sandbox Code Playgroud)