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

+0

IS_NUMBER 함수를 사용하도록 변경되었습니다.이 함수는 현재 사용자가 지정된 데이터베이스 역할의 멤버 인 경우 1을 반환합니다. –

관련 문제