Tsql 将SQL用户存储在变量中

Tsql 将SQL用户存储在变量中,tsql,sql-server-2014,Tsql,Sql Server 2014,我在SSMS(2014)中生成了一些创建脚本,作为脚本的一部分,创建了几个帐户。我们将根据db是部署用于测试、预生产还是生产而使用不同的帐户 我想让安装程序很容易更改帐户,因此我认为如果我可以存储登录名并在脚本的最顶端声明,这将是一个好主意,但是我不确定如何进行 目前我有: CREATE USER [RAMBOLL\SVC_D-StructureDB] FOR LOGIN [somedomain\someaccount] WITH DEFAULT_SCHEMA=[dbo] GO ALTER RO

我在SSMS(2014)中生成了一些创建脚本,作为脚本的一部分,创建了几个帐户。我们将根据db是部署用于测试、预生产还是生产而使用不同的帐户

我想让安装程序很容易更改帐户,因此我认为如果我可以存储登录名并在脚本的最顶端声明,这将是一个好主意,但是我不确定如何进行

目前我有:

CREATE USER [RAMBOLL\SVC_D-StructureDB] FOR LOGIN [somedomain\someaccount] WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE [db_datareader] ADD MEMBER [somedomain\someaccount]
GO
ALTER ROLE [db_datawriter] ADD MEMBER [somedomain\someaccount]
GO
如何声明“somedomain\someaccount”,然后在上面的SQL代码中引用它?我试过了,但SQL不喜欢

DECLARE @SomeAccount VARCHAR(255)
SET @SomeAccount = "[somedomain\someaccount]"

CREATE USER @SomeAccount FOR LOGIN @SomeAccount WITH DEFAULT_SCHEMA=[dbo]
    GO
    ALTER ROLE [db_datareader] ADD MEMBER @SomeAccount
    GO
    ALTER ROLE [db_datawriter] ADD MEMBER @SomeAccount
    GO

这些遗留的和将被删除的存储过程允许参数化

但是,我会考虑一个if语句,如果只有几个选项的话。如果您需要更大的灵活性,那么使用动态SQL

DECLARE @env VARCHAR(10)
SET @env = 'test'

IF @env = 'test'
BEGIN
    CREATE USER [somedomain\someaccount] FOR LOGIN [somedomain\someaccount] WITH DEFAULT_SCHEMA=[dbo]
    ALTER ROLE [db_datareader] ADD MEMBER [somedomain\someaccount]
    ALTER ROLE [db_datawriter] ADD MEMBER [somedomain\someaccount]
END
ELSE IF @env = 'live'
BEGIN
    CREATE USER [somedomain\liveaccount] FOR LOGIN [somedomain\liveaccount]WITH DEFAULT_SCHEMA=[dbo]
    ALTER ROLE [db_datareader] ADD MEMBER [somedomain\liveaccount]
    ALTER ROLE [db_datawriter] ADD MEMBER [somedomain\liveaccount]
END
...

这些遗留的和将被删除的存储过程允许参数化

但是,我会考虑一个if语句,如果只有几个选项的话。如果您需要更大的灵活性,那么使用动态SQL

DECLARE @env VARCHAR(10)
SET @env = 'test'

IF @env = 'test'
BEGIN
    CREATE USER [somedomain\someaccount] FOR LOGIN [somedomain\someaccount] WITH DEFAULT_SCHEMA=[dbo]
    ALTER ROLE [db_datareader] ADD MEMBER [somedomain\someaccount]
    ALTER ROLE [db_datawriter] ADD MEMBER [somedomain\someaccount]
END
ELSE IF @env = 'live'
BEGIN
    CREATE USER [somedomain\liveaccount] FOR LOGIN [somedomain\liveaccount]WITH DEFAULT_SCHEMA=[dbo]
    ALTER ROLE [db_datareader] ADD MEMBER [somedomain\liveaccount]
    ALTER ROLE [db_datawriter] ADD MEMBER [somedomain\liveaccount]
END
...