1

基本上,我希望修改数据库中已有的存储过程,该存储过程使用来自 Web 应用程序的数据更新表的记录(表 x)。更新表 x 后,我想开发该存储过程来检查表 x 以查看 column_z 为空的主键实例是否存在记录。基本上,像

ALTER PROCEDURE [cred].[UpdateTablex]
(@field0 int,
@field1 int,
@field2 int,
@field3, int,
@field4 VARCHAR(100),
@field5 datetime,
@field6 datetime)
AS 
UPDATE tablex 
SET field4 = @field4,
field6 = @field6
WHERE field1 = @field1 AND
field2 = @field2 AND 
field3 = @field3 AND
field0 = @field0 AND  
field5 = @field5;

其余的将是我的想法和我认为可能开发的方式的伪代码

IF  ((SELECT COUNT(field0) FROM tablex WHERE field6 is null AND field2 = @field2
AND field3 = @field3 AND field5 = @field5) equals 0)
exec cred.Demobilize(@field0, @field1);

或者简单地说,如果 Select 语句在任何地方返回任何表明 field6 为空的结果,那么我们什么也不做。显然,这意味着如果 Select 语句不返回任何内容,那么我想执行另一个存储过程。

这可能很简单,所以请原谅我,因为我对某些类型的 SQL 语法和用法有点陌生,这就是其中之一。

另外,有人能指出我正确的方向来进一步教育自己这样的话题吗?

谢谢你。

4

1 回答 1

5

您可以在if不使用变量的情况下执行以下操作:

IF  (0 = (SELECT COUNT(field0)
         FROM tablex
         WHERE field6 is null AND field2 = @field2 AND field3 = @field3 AND field5 = @field5
        )
    )
begin
    exec cred.Demobilize(@field0, @field1);
end;

在实践中,我认为这将更常见地使用以下方式编写not exists

IF  (not exists (SELECT 1
                 FROM tablex
                 WHERE field6 is null AND field2 = @field2 AND field3 = @field3 AND field5 = @field5
                )
    )
begin
    exec cred.Demobilize(@field0, @field1);
end;

版本可以更快,因为遇到的not exists第一行将满足条件子句。该count(*)版本必须找到所有匹配的行并对其进行计数。

于 2013-06-03T18:31:56.613 回答