2017-11-08 11 views
0

Webページを介したユーザーアカウントのサーバーロールの付与と取り消しを自動化しようとしています。 ページに入力された詳細はSQLテーブルに格納され、テーブルから必要な情報を選択してロールを付与/取り消すために作成されたジョブがあります。 テーブルに1つのユーザー情報がある場合、コードはうまく機能しています。 しかし、テーブルに複数のユーザーが含まれている場合に問題が発生します。SQLサーバーロールの付与と取り消し

ユーザーにロールを付与するために使用しているクエリを以下に示します。

DECLARE @epfunc TABLE 
(userid SYSNAME, 
access SYSNAME 
); 
INSERT INTO @epfunc 
VALUES 
(
(
    SELECT userid 
    FROM epfunc 
), 
(
    SELECT access 
    FROM epfunc 
) 
); 
DECLARE @rolename SYSNAME, @membername SYSNAME; 
SELECT @rolename = access, 
     @membername = userid 
FROM @epfunc; 

execute sp_addsrvrolemember @membername, @rolename 

epfuncテーブルには、次の列があり "サーバー名、INSTANCENAME、データベース名、環境、ユーザーID、アクセス、STARTDATE、expirydate、Grantedby"

はこれを支援してください。

答えて

0
DECLARE @rolename SYSNAME, @membername SYSNAME; 
SELECT @rolename = access, 
     @membername = userid 
FROM @epfunc; 

コードを格納しますが、複数のユーザーを持っている場合、それは期待通りに動作しませんので、あなたは、複数の行を持つ結果の最後の行の上の部分..

私は行くだろう下記のようなカーソル(擬似コード)

declare cursor cs 
    for select * from @epfunc 

    open cs 
    fetch next from cs into 
    @rolename,@membername 

WHILE @@FETCH_STATUS = 0 
BEGIN 
execute sp_addsrvrolemember @membername, @rolename 
increment cursor 

end 
close and deallocate cursor 
+0

こんにちは、ありがとうございます。カーソルとインクリメントが認識されないというエラーが出てきました。これを今すぐトラブルシューティングし、一度解決すると解決します。 – aravind

+0

私はそれをPseduoコードと言い、カーソルの例を見て必要に応じて実装します – TheGameiswar

関連する問題