Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我的查询不适用于特定参数?_Sql_Sql Server_Tsql_Sql Server 2012_Rdbms - Fatal编程技术网

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

Sql 为什么我的查询不适用于特定参数?,sql,sql-server,tsql,sql-server-2012,rdbms,Sql,Sql Server,Tsql,Sql Server 2012,Rdbms,我有三张桌子 系统用户 抱怨 映射 1用于注册网站用户。 2是为了避免投诉 我将在稍后讨论3 收到投诉后,会将其分配给系统用户,即投诉表中的AssignToUser_ID 投诉: 同情心 日期 分配者ID 现在,如果用户想要查看投诉,那么应该只显示分配给他而不是其他人的投诉,这是我已经解决的部分,但是 现在我将讨论映射表 映射: 映射ID 系统用户ID 分配者ID 此表用于存储指定的系统用户,即,如果投诉被分配给我,并且我决定将其分配给另一个用户,以便他也可以查看实际分配给我的投诉,则这是可能的

我有三张桌子

系统用户 抱怨 映射 1用于注册网站用户。 2是为了避免投诉

我将在稍后讨论3

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

投诉:

同情心 日期 分配者ID 现在,如果用户想要查看投诉,那么应该只显示分配给他而不是其他人的投诉,这是我已经解决的部分,但是

现在我将讨论映射表

映射:

映射ID 系统用户ID 分配者ID 此表用于存储指定的系统用户,即,如果投诉被分配给我,并且我决定将其分配给另一个用户,以便他也可以查看实际分配给我的投诉,则这是可能的。 现在这部分我已经解决了,但问题是,如果我以指定用户的身份登录,那么我可以查看分配给实际用户的投诉,但是如果我以原始用户的身份登录,那么我无法查看分配的投诉

我的尝试:

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

您使用@SystemUser\u ID作为SystemUser\u ID和AssignToUser\u ID。我认为它们是两个不同的概念,有各自的系统。 您的分配者标识号1可能与您的系统用户标识号1不同

根据分配的用户类型或系统,您需要创建两个不同的条目

一条路要走:

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

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

寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者来说是没有用处的。我已经尽了最大的努力来描述这个问题,在发布之前,我已经花了很多时间,一个人不应该太强硬,也不是每个人都能完美地发布一个好的问题。对不起,先生,这不是作文比赛什么的。我发布了我认为应该发布的内容,这是SOF的作用。我了解这项工作,您可以查看此处,了解如何改进问题。示例数据和预期输出将非常有用。刚刚编辑,您也需要更改通话。对不起,有时候我脑子有问题