1
필자가 작성한 쿼리에 약간의 도움이 필요합니다. 나는 그것을 가장 간단한 형태로 분해했다. 내 테이블 구조의 예는 다음과 같습니다 (I는 명확성을 위해 그것을 변경 한) :하위 쿼리에서 조인 된 테이블
내가해야 할 일은Users
UserId int -- PK Identity
Username varchar(30)
DirectReports
DirectReportId int -- PK Identity
UserId int -- FK to Users.UserId
ManagerId -- FK to Users.UserId
Documents
DocumentId int -- PK Identity
DocumentOwner int -- FK to Users.UserId
DocumentName varchar(30)
CreatedBy int -- FK to Users.UserId
CreatedDate datetime
는 문서를 생성 한 사용자가 자신의 문서를 볼 수 있도록 허용합니다. 그래서 다음을 사용합니다 :
CREATE PROCEDURE GetUsersDocuments
@UserId INT = null
AS
BEGIN
SET NOCOUNT ON;
Select * from Documents D
Where D.CreatedBy = ISNULL(@UserId, D.CreatedBy)
END
특정 사용자가 만든 모든 문서를 반환합니다.
그러나 모델의 비즈니스 규칙은 또한 다른 사용자가 사용자를 대신하여 문서를 작성할 수 있도록 지시합니다. 따라서 사용자는 자신이 만든 모든 레코드와 소유권이있는 모든 문서에 대한 가시성을 필요로합니다.
CREATE PROCEDURE GetUsersDocuments
@UserId INT = null
AS
BEGIN
SET NOCOUNT ON;
Select * from Documents D
Where D.CreatedBy = ISNULL(@UserId, D.CreatedBy)
OR D.DocumentOwner = ISNULL(@UserId, D.DocumentOwner)
END
모두 잘 작동합니다. 그러나 사용자의 모든 직접 보고서에는 사용자가 작성한 문서와 사용자가 소유하고있는 문서를 모두 볼 수 있어야한다는 정보를 받았습니다.
내가 정의한 예제 테이블 구조가 주어지면 쿼리의 관점에서이를 어떻게 표현할 수 있습니까?
많은 감사