1

基本的に、Web アプリケーションからのデータでテーブルのレコード (テーブル x) を更新する、データベースに既にあるストアド プロシージャを変更しようとしています。テーブル x を更新した後、そのストアド プロシージャを作成して、テーブル x をチェックし、column_z が null である主キーのそのインスタンスのレコードが他に存在するかどうかを確認したいと考えています。基本的に、次のようなもの

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 がどこでも null であることを示す結果を返した場合、何もしません。明らかに、Select ステートメントが何も返さない場合は、別のストアド プロシージャを実行したいということです。

これはおそらく単純なものなので、私は特定のタイプの SQL 構文と使用法に慣れていないので、ご容赦ください。これはその 1 つです。

また、このようなトピックについて自分自身をさらに教育するために、誰かが私を適切な方向に向けることができますか?

ありがとうございました。

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 に答える