2015-01-08 85 views
2
DECLARE @SQLStatement VARCHAR(4000) 
DECLARE @T_DBuser TABLE (DBName SYSNAME, UserName SYSNAME, AssociatedDBRole NVARCHAR(256)) 

SET @SQLStatement = 'SELECT 
         ''?'' AS DBName,dp.name AS UserName,USER_NAME(drm.role_principal_id) AS AssociatedDBRole 
        FROM ?.sys.database_principals dp 
        LEFT OUTER JOIN ?.sys.database_role_members drm ON dp.principal_id = drm.member_principal_id 
        WHERE dp.sid NOT IN (0x01) AND dp.sid IS NOT NULL 
         AND dp.type NOT IN (''C'') 
         AND dp.is_fixed_role <> 1 
         AND dp.name NOT LIKE ''##%'' 
         AND ''?'' NOT IN (''master'',''msdb'',''model'',''tempdb'') 
        ORDER BY DBName' 

INSERT @T_DBuser 
    EXEC sp_MSforeachdb @SQLStatement 

SELECT * 
FROM @T_DBuser 
ORDER BY DBName 

我使用從LoginUserPermission.zip文件的代碼上 https://gallery.technet.microsoft.com/scriptcenter/Get-logins-databases-816f66b2發現了一個腳本。附近有語法錯誤「 - 」,利用LoginUserRolePermission.zip

當我嘗試運行只是這一節我收到此錯誤:(34行(S)的影響)

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '-'.

所有的代碼,做工精細的其他部分。我試圖打破只select語句和我收到一個消息

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '?'.

瘋狂的事情是腳本工作就好了兩個星期前。我所要做的就是更改數據庫名稱並運行。

回答

1

其中一個數據庫的名稱中有一個破折號(' - ')。把方括號放在你的「?」查詢的FROM和LEFT JOIN中的參數。

... 
FROM [?].sys.database_principals dp 
    LEFT OUTER JOIN [?].sys.database_role_members drm 
     ON dp.principal_id = drm.member_principal_id 
... 
+0

非常感謝!這樣可行!奇怪的是,兩星期前它沒有括號。但它是有道理的,因爲我之前使用過的數據庫沒有破折號!再次感謝! –

+0

@ShertoneYarborough史密斯:不客氣。請務必點擊旁邊的複選標記將此答案標記爲已接受。 –