1

ユーザーがアクセスできるストアのリストを取得するクエリがあります。ただし、ユーザーが内部スタッフ メンバーである場合、自動的にすべてのストアにアクセスできます。

スタッフ テーブルでは、これは Internal と呼ばれる列で示されます。これは、内部スタッフである場合は 1、内部スタッフではない場合は 0 で表されます。

現在、userId が渡されるユーザーのストアのリストを取得するストアド プロシージャがあります。ストアド プロシージャは次のようになります。そのため、クエリを1つに結合する方法を見つけようとしています。

    DECLARE @IsInternal bit

    SELECT @IsInternal = Staff.Internal FROM Staff WHERE Staff.StaffId = @userId

 IF(@IsInternal = 0)
   BEGIN
      SELECT DISTINCT Store.Id, Store.Name,
      FROM 
        Store JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
              JOIN Staff ON StaffAccess.StaffId= Staff.StaffId
      WHERE
        StaffAccess.StaffID = @userId
      ORDER BY
          Store.Name
   END
ELSE
   BEGIN
        SELECT DISTINCT Store.Id,Store.Name,
        FROM Store
        ORDER BY Store.Name
  END

申し訳ありませんが、スタッフアクセステーブルがあることを含めるべきでした。以下を実行すると、内部スタッフではないユーザーのすべての店舗が返されます

SELECT DISTINCT
        Store.Id,
        Store.Name,

    FROM
        Store
            JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
            JOIN Staff on Staff.Internal= 1 OR (StaffAccess.StaffID = @userId        AND StaffAccess.StaffId = Staff.StaffId)   

    ORDER BY
        Store.Name  
4

1 に答える 1

2

要件を解決するこの簡単なクエリを使用できます

SELECT DISTINCT
     Store.storeid,
     Store.Name 
FROM
    Store JOIN Staff ON Staff.StaffID = @UserId 
    AND (Staff.Internal = 1 OR 
         Staff.StoreID = Store.StoreId)
ORDER BY
    Store.Name;

ここでフィドル

于 2013-02-28T13:09:57.567 に答える