2014-09-30 92 views
0

我正在将PostgreSQL查询转换为SQL服务器,并试图了解下面的查询究竟做了什么。我理解这些联合,但其余的都不明确。任何人都可以请帮我在这里。将用户访问查询从PostgreSQL转换为SQL Server

select c.name 
FROM CNT c 
LEFT JOIN shares s ON 
c.id = s.id AND s.username::name = "current_user"() 
    WHERE c.username::name = "current_user"() OR 'admin'::text = ((SELECT user_role_privs.granted_role 
      FROM user_role_privs 
      WHERE user_role_privs.granted_role = 'admin'::text)) OR s.username IS NOT NULL AND s.grantee_username::text <> ''::text 

回答

0

我相信下面的查询是SQL Server的等价物。我添加了dbo模式名称和语句终结符来说明最佳实践,但这在技术上并不需要。

SELECT c.name 
FROM dbo.CNT AS c 
     LEFT JOIN dbo.shares s ON c.id = s.id 
           AND s.username = CURRENT_USER 
WHERE c.username = CURRENT_USER 
     OR IS_MEMBER(N'admin') = 1 
     OR s.username IS NOT NULL 
     AND s.grantee_username <> ''; 
+0

感谢这一点,但'dbo.user_role_privs'似乎并不是SQL Server中的有效对象。它看起来像一个postgreSQL系统表。 – user3844877 2014-09-30 11:56:21

+0

我更改为使用IS_NUMBER函数,如果当前用户是指定数据库角色的成员,则返回1。 – 2014-09-30 12:04:04