2014-09-30 93 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