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
添加一些值,但我正在为此寻找更好的解决方案。
有几个选项可用于此目的。第一种方法是在过程声明中设置默认值,以保证永远不会为这些参数传入 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)
我相信还有其他选择,但我认为其中一个可以让你到达你需要去的地方。
归档时间: |
|
查看次数: |
2558 次 |
最近记录: |