“-”附近的语法不正确,使用来自 LoginUserRolePermission.zip 的脚本

Incorrect syntax near '-', using a script from LoginUserRolePermission.zip

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.

当我尝试仅运行此部分时,我收到此错误:(34 行受影响)

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

代码的所有其他部分工作正常。我试图仅分解 select 语句,但我收到一条消息

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

疯狂的是脚本在两周前运行良好。我所要做的就是更改数据库名称并运行。

您的一个数据库的名称中有破折号(“-”)。在“?”两边加上方括号查询的 FROM 和 LEFT JOIN 中的参数。

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