Mr.*_*Boy 1 t-sql sql-server stored-procedures
鉴于以下内容,ID
主键在哪里,
CREATE PROCEDURE Test
@ID INT,
@RetVal INT OUT
AS BEGIN
Select @RetVal = Column1 FROM Table1 WHERE ID = @ID;
END
Run Code Online (Sandbox Code Playgroud)
如果指定的主键(ID
)不存在行会发生什么?我会失败或将@RetVal留在未指定的状态吗?
另外,程序的调用者怎么知道这种情况呢?
变量(或本例中的参数)将具有之前的任何值,并且不进行任何赋值.
如果过程的调用者没有明确地将任何其他内容作为参数传递给参数,那么这将是null
您的情况.
您可以@@rowcount
在语句后立即检查以查看涉及的行数.如果0没有进行任何分配,如果超过1则不确定实际分配了哪些可能的值.
如果零行匹配,您可以按如下方式重写以分配null(覆盖任何现有值),如果多个行匹配则抛出错误.
Set @RetVal = (SELECT Column1 FROM Table1 WHERE ID = @ID);
Run Code Online (Sandbox Code Playgroud)
另请参阅DBA站点上的最新答案此常量扫描和左外部联接来自于一个简单的SELECT查询计划?
归档时间: |
|
查看次数: |
86 次 |
最近记录: |