web-dev-qa-db-ja.com

SQLのストアドプロシージャに同時に複数のパラメーターを検証することは可能ですか?

Microsoft SQL Server 2008で、20以上のパラメーターを含むストアドプロシージャを実現しました。このSPで、NULL値を受け入れないテーブルにデータを更新または挿入します。

テーブルへの挿入または更新を実行する前に、これらのパラメーターのいずれかにnull値が含まれているかどうかを評価する必要があります。

例:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_Example]
  @parameter1 char (8),
  @parameter2 char (20),
  @parameter3 char (20),
  @parameter4 char (20),
  @parameter5 char (20),
  @parameter6 char (20),
  @parameter7 char (20),
  @parameter8 char (40),
  @parameter9 char (15),
  @parameter10 char (15) ,
  @parameter11 char (15)...

これに対する可能な解決策があります。これは、パラメーターごとに評価パラメーターを実行し、if is nullに値を追加して検証しますが、これに対するより良い解決策を探しています。

4
Fernando Bernal

これに使用できるオプションがいくつかあります。 1つ目は、プロシージャ宣言内にデフォルト値を設定するだけで、これらのパラメータにNULL値が渡されないようにすることです。

CREATE PROCEDURE [dbo].[sp_Example]
  @parameter1 char (8) = 'test',
  @parameter2 char (20) = 'test2'....

それらを1つずつチェックする2つ目の方法は、NULL値に基づいてそれらを設定する単一のステートメントを用意することです。の線に沿った何か

  ALTER PROCEDURE [dbo].[sp_Example]
  @parameter1 char (8),
  @parameter2 char (20),
  @parameter3 char (20),
  @parameter4 char (20),
  @parameter5 char (20),
  @parameter6 char (20),...

  Select @parameter1 = CASE when @parameter1 is null then 'test' else @parameter1 end
  ,@parameter2 = Case when @parameter2 is null then 'test2' else @parameter2 end...

もう1つの方法は、アクションを実行する前に値のいずれかがNULLかどうかを確認したいだけの場合、そのようなことをチェックする単一のifステートメントを簡単に実行できることです。

alter PROCEDURE [dbo].[sp_Example]
  @parameter1 char (8) = NULL,
  @parameter2 char (20) = NULL....

  as 
  if @parameter1 is null or @parameter2 is null.....
  begin
        print 'You passed in a NULL value for one of your parameters'
  end
  Else
  begin
        --your statement here
  end

CONCAT_NULL_YIELDS_NULL設定の値に応じて、次のものも使用できます。

IF (@Parameter1 + @Parameter2 + @Paramater3 ...) IS NULL
BEGIN
    RAISERROR (N'One or more parameters is NULL', 1, 1);
END
ELSE
    -- other statements that will run if all @parameters are NOT null.
BEGIN

他の選択肢もあると思いますが、これらの1つがあなたがどこに行く必要があるかを理解するでしょう。

5
mskinner