' - '附近的语法不正确,使用LoginUserRolePermission.zip中的脚本

时间:2015-01-08 21:49:15

标签: sql sql-server

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行(s)受影响)

  

Msg 102,Level 15,State 1,Line 3
  “ - ”附近的语法不正确。

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

  

Msg 102,Level 15,State 1,Line 1
  “?”附近的语法不正确。

疯狂的事情是两周前剧本运作得很好。我所要做的就是更改数据库名称并运行。

1 个答案:

答案 0 :(得分: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 
...