我有一个这样的存储过程示例(根据我以前的工作经验):
Select * from table where (id=@id or id='-999')
根据我对此查询的理解,' - 999'用于避免在没有从用户传输任何值时发生异常。到目前为止,在我的研究中,我还没有在互联网和其他公司的实施中找到它的用法。
@id从用户转移。
在提供与其相关的一些链接时,将不胜感激。
答案 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] 2
或exec [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,我在表中找不到它:
也许在某些系统中,存在丢失/错误ID的记录的可能性远远大于根本不存在的记录?因此,当找不到匹配项时,设计者首选返回没有有效ID的所有记录?
然而,这有一些问题。首先,根据设计,用户可能无法识别结果是一组缺少ID的记录,特别是如果只返回了一个。其次,当前查询会产生问题,因为除了正常匹配之外,它总是会返回丢失的ID记录。也许他们依靠ORDER
来提高可读性?
AFAIK,SQL很好,零行结果,但也许任何调用/曾经称之为健壮的东西都不健全,出现问题(硬异常,软UI错误等等) 。)返回零行?也许那时,这个ID表示一个虚拟行(例如空白和零)以保持运行。
然后再次,这也与上面关于" 记录总是输出的"相同。和ORDER
一样,SQL调用者可能有专门的逻辑,当-999记录是唯一返回的记录时,我怀疑这是最实用的方法,即使在任何时候都是这样做的。< / p>
...我输入的越多,我认为这个 烤箱越多,只有曾祖母才能向我们解释这一点。