2017-07-19 89 views
-1

我有一个存储过程的这样的样品(从我以前的工作经验):“-999”用于所有条件

Select * from table where ([email protected] or id='-999') 

基于我对这个查询理解中,“-999”是用于在用户没有传送值时避免异常。到目前为止,在我的研究中,我还没有发现它在互联网和其他公司实施中的用法。

@id从用户传送。

任何帮助将不胜感激,提供一些相关的链接。

+1

'-999'只是一个'常数',它们用作默认值以避免exception_。它可以是任何“苹果”,“芒果”,但应该是“唯一”的同时。在这种情况下,'-999'可能是唯一的,因为如果用户输入值,'id永远不会是-999。他们本来可以用'-888'或'-1000'也 –

+0

你可以给我提供一些链接,我只是想确认一下。感谢您的帮助。 –

+0

我看不出这是如何帮助避免任何异常。 –

回答

0

我想对此加上我的两个猜测,但请注意,对于我的缺点,我是该领域中最年轻的一个,所以这不是来自那么多的历史或经验。

此外,请注意,由于任何原因,任何人提供给您,您可能无法100%确认。 Your oven might just not have any leftover evidence in and of itself

现在,每另一question我以前读,极端整数是在一些系统中用来表示遗漏值,因为文本和NULL不是在这些系统的选项。说我在找ID#84,并在表中我不能找到它:


  1. 未找到的可能性不大:

或许在某些系统中它更可能是一个记录存在丢失/不正确的ID,而不是根本不存在?因此,当没有找到匹配的时候,设计师首选所有没有有效ID的记录被返回?

然而这有一些问题。首先,根据设计,用户可能无法识别结果是一组缺少ID的记录,特别是如果只返回一个记录。其次,当前查询带来一个问题,因为除了正常匹配之外,它总是会返回缺少的ID记录。也许他们依靠ORDER ing来减轻可读性?


  • 例外上面的SQL:
  • 据我所知,SQL是罚款一零行的结果,但调用/使用说不定什么东西叫它不是健壮的,当返回零行时出现错误(硬异常,软UI错误等)?也许那时,这个ID代表了一个虚拟行(,例如空格和零点)以保持运行。

    话说回来,这也从上面关于“记录,总是输出”相同的参数和ORDER受苦,与添加的可能性,即SQL,来电者可能有专门的逻辑来当-999记录是唯一记录返回,我怀疑这是最实际的方法,即使在这个时代完成的任何时代。


    ...我越式,我越觉得这是烤箱,只有曾祖母可以解释这给我们。

    1

    如果你想避免异常,当你的存储过程中没有值传递给用户时,声明参数为null。像@id int = null

    例如:

    CREATE PROCEDURE [dbo].[TableCheck] 
        @id int = null 
    AS 
    BEGIN 
    
        Select * from table where ([email protected]) 
    END 
    

    现在你可以以两种方式执行:

    exec [dbo].[TableCheck] 2exec [dbo].[TableCheck]

    记住,这是一个独立的事情,如果你想返回整个表时您的输入参数为空。

    要回答您的id = -999条件,我试了一下你的方式。它不会阻止任何异常

    +0

    我想知道为什么它被用在这里,我在互联网上搜索它和许多使用它的人不知道原因。 –

    +0

    @ J.Doe:请发布您的整个存储过程以更好地分析它。 –