2017-03-02 64 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 
...