2011-09-27 74 views
7

我想通過腳本創建數據庫後創建SQL Server登錄。 登錄對於主機是本地的,並且此腳本將在多個主機上運行。通過腳本使用變量創建SQL Server登錄

我想要做的是:

USING MyDatabase 
CREATE MyUser FOR LOGIN USER <computer name>/MyUser 

什麼我不知道該怎麼做的是結合了計算機名稱(例如Location0001。)這個說法。

登錄確實存在於每臺計算機上並且已在SQL Server上列出,因爲它可以訪問其中的其他數據庫。

如果是相關的,腳本應該能夠SQL Server上運行2008

登錄看起來像這樣對每一臺機器:

Location0001\MyUser 
Location0002\MyUser 
Location0999\MyUser 

任何幫助將感激,謝謝。

編輯:我的基礎上,接受的答案最終解決方案如下:

DECLARE @cmd VARCHAR(200) 
SET @cmd = N'CREATE USER [MyUser] FOR LOGIN [' + HOST_NAME() + '\MyUser]' 
EXEC (@cmd) 

回答

7

您可以使用@@ ServerName屬性來獲取計算機的名稱:select @@servername

declare @cmd varchar(200), @username varchar(50) 

set @username = 'testuser' 
set @cmd = ' 
    USE MyDatabase 
    CREATE USER MyUser FOR LOGIN '[email protected]@servername+'\'[email protected] 
PRINT @cmd 
EXEC (@cmd) 
+0

我沒有想到使用內聯SQL。謝謝,我不得不做一些語法修改,但這個概念確實起作用。 – Terry

+4

考慮使用sp_executesql而不是EXEC(UTE)。它允許參數化查詢,從而消除SQL注入的可能性,並利用計劃緩存中的計劃重用。 – 2011-09-28 00:43:06

+2

此建議僅適用於默認實例。對於命名實例,「@@ servername」將返回「MACHINE \ INSTANCE」,因此CREATE USER將失敗。您需要HOST_NAME(),如建議的OP,或者ServerProperty('MachineName'),這取決於您想要實現的目標。我知道這已經得到解答 - 我正在爲那些通過網絡搜索來到這裏的人寫信。 – Cozzamara