Sql 帮助解密存储过程

Sql 帮助解密存储过程,sql,Sql,我一辈子都搞不清楚这个存储过程是如何工作的,或者它到底在做什么,我知道它是如何工作的,但我正试图限制一些需要修改这个存储过程的数据库调用 CREATE PROCEDURE scriptassist.getQueue @Status smallint = -1, @GroupID uniqueidentifier = null, @MACAddress varchar(200) = '' AS SET NOCOUNT ON Print @GroupID SELECT

我一辈子都搞不清楚这个存储过程是如何工作的,或者它到底在做什么,我知道它是如何工作的,但我正试图限制一些需要修改这个存储过程的数据库调用

CREATE PROCEDURE scriptassist.getQueue
    @Status smallint = -1,
    @GroupID uniqueidentifier = null,
    @MACAddress varchar(200) = ''
AS
SET NOCOUNT ON

Print @GroupID

SELECT  *
FROM [Queue]
WHERE
    case @Status
        When -1 Then
            Case When ISNULL(Status,0) <> 1 Then 1 Else 0 End
        Else
            Case When ISNULL(Status,0) = @Status Then 1 Else 0 End
    End =1
And
    case When @GroupID IS NULL Then 1
        Else
            Case When GroupID = @GroupID Then 1 Else 0 End
    End =1
And
    case @MACAddress
        When ''
            Then 1
        Else
            Case When MACAddress = @MACAddress Then 1 Else 0 End
    End =1
Order By DateEntered DESC
创建过程scriptassist.getQueue
@状态smallint=-1,
@GroupID uniqueidentifier=null,
@MACAddress varchar(200)=”
作为
不计较
打印@GroupID
挑选*
从[队列]
哪里
案例@状态
什么时候-1呢
当ISNULL(状态为0)1时,则为1,否则为0结束
其他的
当ISNULL(状态,0)=@Status时,则为1,否则为0结束
结束=1
及
@GroupID为空时为1
其他的
当GroupID=@GroupID时为1,则为0结束
结束=1
及
case@MACAddress
当“
那么1
其他的
MACAddress=@MACAddress然后1 Else 0结束时的情况
结束=1
按日期输入的订单描述

我知道它以某种方式动态地定义Where子句,但我不确定要做什么。另外,如果有人知道一个工具,可以让我看到实际发生了什么,谢谢

根据可以传递的三个条件从队列中选择值。如果传递的变量@Status=-1,或@GroupID为null,或@MACAddress='',则它们不会在Where条件中使用。如果它们存在,则在Where标准中使用它们


当每个case语句返回1时,将返回队列表中相应的记录。

您注意到它正在动态过滤WHERE子句,这是正确的。例如

case @MACAddress
    When ''
        Then 1
    Else
        Case When MACAddress = @MACAddress Then 1 Else 0 End
End =1
如果MACAddress是空字符串,则它不用于过滤结果。(Case语句returs 1,然后将其与末尾的1进行比较,结果为TRUE,因此包含该行。)


如果@MACAddress参数不是空字符串,则将其与表中的MACAddress列进行比较。如果存在匹配项,则返回1,该值等于1,因此包含该行。如果没有匹配项,则返回0,该值不等于1,并且该行被排除

那么,返回where标准的实际get是什么,是否类似于status=@status?因此,基本上如果status=1(例如),它将是Select*From[Queue]Where status=@status?否,Where条件将是Where(基于CASE语句的0或1)和(基于CASE语句的0或1)如果所有1,则该记录满足Where子句。1=真0=假