2017-09-13 44 views
0

我有一個工具,它更新了以下信息格蘭特服務器角色的SQL Server 2008R2

服務器,例如,用戶ID,訪問,開始日期和expirydate我的SQL表 'eptrack'。

每次更新此表時,觸發器都會啓動一個作業,該作業又會連接到相應的服務器/實例並授予請求的服務器角色。

我能夠通過以下查詢授予角色。

exec sp_addsrvrolemember'na\admin_Test1', 'sysadmin' 

但是,當我嘗試通過下面的查詢從表中選擇此信息時,出現錯誤。

EXEC sp_addrolemember '(select userid from eptrack)' , '(select access from eptrack)' 

我能得到一個查詢幫助上授予服務器角色從桌上拿起了用戶ID在同一個表

回答

0

你應該使用遊標通過您的表去,得到1行一時間,分配2個變量,並將它們傳遞到sp_addsrvrolemember這樣的:

declare @eptrack table (userid sysname, access sysname); 
insert into @eptrack values ('na\admin_Test1', 'sysadmin'); 

declare @rolename sysname, @membername sysname; 

select @rolename = access, @membername = userid 
from @eptrack; 

exec sp_addsrvrolemember @membername, @rolename; 
+0

謝謝你的查詢。這次我看到一個新的錯誤。 「無法更改服務器角色‘NA \ admin_Test1’,因爲它不存在,或者您沒有權限。」 我有我的登錄系統管理員訪問權限。 –

+0

@Arvind雅利安人,對不起,這是我的代碼錯誤,我用的userid'@ rolename',不爲'@ membername',我更新了我的答案 – sepupic

+0

我固定的問題。感謝您的幫助。 –

0

根據sp_addrolemember,此接受變量以及

-- Syntax for SQL Server and Azure SQL Database 

sp_addrolemember [ @rolename = ] 'role', 
    [ @membername = ] 'security_account' 

所以你可以嘗試像下面

declare @rolename sysname, 
     @membername sysname 

     select @rolename='db_Datareader',@membername='test' 
EXEC sp_addrolemember @rolename,@membername 

以上選擇可以從表中,如果有從選擇,這將無法正常工作,您可能希望有一種方法跟蹤多個結果/一次只得到一排

0

謝謝你的協助。我試圖上述查詢下面

DECLARE @rolename sysname類型, @membername類型爲sysname如上所述

選擇@角色名=(從選擇eptrack接入),@成員名稱=(從選擇的userid eptrack) EXEC sp_addrolemember @rolename ,@ membername

我看到一個錯誤,用戶標識不存在。我剛插入表中的信息並在那之後執行查詢。

+0

我解決了這個問題。感謝您的幫助。 –

0

這工作,謝謝。但是我們正在進入用戶名和手動訪問,我們需要從表

聲明@eptrack表(userid sysname,access sysname);插入@eptrack值((從eptrack選擇用戶標識),(從eptrack選擇訪問));

declare @rolename sysname,@membername sysname;

從@eptrack選擇@rolename = access,@membername = userid ;

exec sp_addsrvrolemember @membername,@rolename;

我試過上面的一個,看到一個錯誤的用戶標識不是一個有效的登錄。 要檢查,如果我輸入SELECT命令吧?

該表將有頻繁插入新行和查詢需要每一個新值插入時挑選的用戶ID和訪問從表中。

相關問題