为什么我的查询不适用于特定参数?

时间:2017-03-31 15:38:16

标签: sql sql-server tsql sql-server-2012 rdbms

我有 3 表格

  1. SystemUsers
  2. 投诉
  3. 映射
  4. 1 用于注册网站用户。 2 用于保存投诉

    我稍后会讨论 3

    收到投诉后,会将其分配给系统用户,即投诉表中的AssignToUser_ID。

    投诉:

    1. CompaintID
    2. 日期
    3. AssignToUser_ID
    4. 现在,如果用户想要查看投诉,那么只会显示那些分配给他而不是其他投诉的投诉,这是我已解决的部分,但是......

      现在我将讨论MAPPING表。

      映射:

      1. MappingID
      2. SystemUser_ID
      3. AssignToUser_ID
      4. 此表用于存储指定的系统用户,即如果投诉被分配给我并且我决定将其分配给另一个用户,那么他也可以查看实际分配给我的投诉然后就可以了。 现在这部分我已经解决了,但问题是如果我以指定用户身份登录,那么我可以查看分配给实际用户的投诉,但如果我以原始用户身份登录,那么我无法查看分配的投诉。

        我的尝试:

        CREATE Procedure [dbo].[usp_getAllMarkedComplaints] 
        (
        
        
            @SystemUser_ID int
        
        )
        AS 
        Begin
        
        if exists (Select * from mapping where systemuser_id = @SystemUser_ID )
        begin
                Select  * From dbo.Complaints Comp
                Where (Comp.AssignToUser_ID IN (select assigntouser_id from mapping where systemuser_id = @SystemUser_ID))      AND 
                Comp.ComplaintStatus_ID <3 
            end
            else
            begin
        
                Select * From dbo.Complaints Comp
                Where (Comp.AssignToUser_ID = @SystemUser_ID) AND 
                Comp.ComplaintStatus_ID <3 
        
        
            end
        End
        

1 个答案:

答案 0 :(得分:0)

您使用@SystemUser_ID作为systemuser_id AND作为AssignToUser_ID。我认为它们是两种不同的概念,具有自己的增量系统。 您的AssignToUser_ID n°1可能与您的systemuser_id n°1不同。

您需要根据您的用户类型(指定的OR系统)制作两个不同的条目。

一种方法:

CREATE Procedure [dbo].[usp_getAllMarkedComplaints] 
(
    @user_ID int,
    @user_type char(3)
)
AS 
Begin

    if @user_type = 'SYS'
    begin
        Select  * From dbo.Complaints Comp
        Where Comp.AssignToUser_ID IN (select assigntouser_id 
                                        from mapping 
                                        where systemuser_id = @user_ID)
         AND  Comp.ComplaintStatus_ID <3 
    end

    if @user_type = 'ASG'
    begin

        Select * From dbo.Complaints Comp
        Where Comp.AssignToUser_ID = @user_ID
          AND Comp.ComplaintStatus_ID <3 

    end
End

另一种方法是制作两个不同的存储过程。