'-999'用于所有条件

时间:2017-07-19 05:31:50

标签: sql sql-server tsql

我有一个这样的存储过程示例(根据我以前的工作经验):

Select * from table where (id=@id or id='-999')

根据我对此查询的理解,' - 999'用于避免在没有从用户传输任何值时发生异常。到目前为止,在我的研究中,我还没有在互联网和其他公司的实施中找到它的用法。

@id从用户转移。

在提供与其相关的一些链接时,将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果要在没有从用户传输的值时避免异常,请在存储过程中将参数声明为null。与@id int = null

一样

例如:

CREATE PROCEDURE [dbo].[TableCheck]
    @id int = null
AS
BEGIN

    Select * from table where (id=@id)
END

现在你可以用任何一种方式执行它:

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

请记住,如果要在输入参数为null时返回整个表,这是一个单独的事情。

要回答您的id = -999条件,我会按照您的方式尝试。它不会阻止任何异常

答案 1 :(得分:0)

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

另外,请注意,无论出于何种原因,您可能无法100%确认。 Your oven might just not have any leftover evidence in and of itself

现在,我之前读过的另外 question ,在某些系统中使用了极值整数来表示缺失值,因为文本和NULL不是选项那些系统。说我正在寻找ID#84,我在表中找不到它:

  1. 未找到不可能:
  2. 也许在某些系统中,存在丢失/错误ID的记录的可能性远远大于根本不存在的记录?因此,当找不到匹配项时,设计者首选返回没有有效ID的所有记录?

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

    1. SQL以上的例外:
    2. AFAIK,SQL很好,零行结果,但也许任何调用/曾经称之为健壮的东西都不健全,出现问题(硬异常,软UI错误等等) 。)返回零行?也许那时,这个ID表示一个虚拟行(例如空白和零)以保持运行。

      然后再次,这也与上面关于&#34; 记录总是输出的&#34;相同。和ORDER一样,SQL调用者可能有专门的逻辑,当-999记录是唯一返回的记录时,我怀疑这是最实用的方法,即使在任何时候都是这样做的。< / p>

      ...我输入的越多,我认为这个 烤箱越多,只有曾祖母才能向我们解释这一点。