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
に値を追加して検証しますが、これに対するより良い解決策を探しています。
これに使用できるオプションがいくつかあります。 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つがあなたがどこに行く必要があるかを理解するでしょう。