2015-08-18 77 views
0

我無法理解爲什麼我的查詢沒有執行它應該執行的操作。它應該在每個數據庫中運行命令以獲得權限,但它似乎爲每個數據庫賦予了相同的權限,就好像它每次都在同一個數據庫中運行一樣,只是替換數據庫的名稱。謝謝你的幫助。循環並在每個數據庫上執行代碼

SET NOCOUNT ON 
DECLARE @dbs TABLE (dbname VARCHAR(50)) 
DECLARE @CurrentDB VARCHAR(50) 
DECLARE @Permissions TABLE (DBName sysname, UserName sysname, 
LoginType sysname, AssociatedRole varchar(max),create_date datetime, 
modify_date datetime) 

INSERT INTO @dbs (dbname) 
SELECT name FROM master.sys.databases WHERE state_desc != 'OFFLINE' 
WHILE EXISTS (SELECT dbname FROM @dbs) 
BEGIN 
    SET @CurrentDB = (SELECT TOP 1 dbname FROM @dbs ORDER BY dbname) 

     INSERT INTO @Permissions 
     SELECT @CurrentDB AS DBName, 
      case prin.name when 'dbo' then prin.name + ' ('+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name = @CurrentDB) + ')' else prin.name end AS UserName, 
      prin.type_desc AS LoginType, 
      isnull(USER_NAME(mem.role_principal_id),'') AS AssociatedRole ,create_date,modify_date 

     FROM sys.database_principals prin 
      LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id 
     WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and 
     prin.is_fixed_role <> 1 AND prin.name NOT LIKE '##%' 

DELETE FROM @dbs WHERE dbname = @CurrentDB 

END 

SELECT * FROM @Permissions 

回答