是否可以将多个参数同时验证到 sql 中的存储过程中?

Fer*_*nal 4 sql-server-2008 sql-server stored-procedures sql-server-2008-r2

在 Microsoft SQL Server 2008 上,我实现了一个包含 20 多个参数的存储过程,在这个 SP 中我更新或插入数据到不接受空值的表中。

在执行插入或更新到表之前,我需要评估这些参数之一是否包含空值。

例子:

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)...
Run Code Online (Sandbox Code Playgroud)

我有一个可能的解决方案,它是按参数执行评估参数并验证if is null添加一些值,但我正在为此寻找更好的解决方案。

msk*_*ner 5

有几个选项可用于此目的。第一种方法是在过程声明中设置默认值,以保证永远不会为这些参数传入 NULL 值:

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

一次检查一个的第二种选择是只使用一个语句来根据 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...
Run Code Online (Sandbox Code Playgroud)

另一种选择是,如果您只想在执行操作之前查看任何值是否为 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
Run Code Online (Sandbox Code Playgroud)

根据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
Run Code Online (Sandbox Code Playgroud)

我相信还有其他选择,但我认为其中一个可以让你到达你需要去的地方。