2017-03-02 159 views
1

我在SSMS(2014)中生成了一些创建脚本,并且在脚本中创建了多个帐户。我们将根据数据库是否部署用于测试,试生产或生产而使用不同的帐户。我想让安装程序很容易更改帐户,所以我认为如果我可以存储登录并在脚本的最上方声明它是个不错的主意,但是我不知道如何去对这个。目前,我有将sql用户存储在变量中

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 

回答

0

这些遗产,将被移除的存储过程允许参数化

不过,我会考虑的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 
...