在存储过程中使用数据库

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)


XIV*_*ons 6

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)

  • 快速检查显示这些已被弃用http://msdn.microsoft.com/en-us/library/ms178013.aspx. (3认同)