检查存储过程的每个参数是否都具有默认值

时间:2011-06-09 14:29:16

标签: sql sql-server-2005 tsql stored-procedures

您将如何实施该检查?您有一个存储过程的N个参数。

如果所有值都为null或0或空字符串,则运行代码,否则跳过它

这就是我实现它的方式,还有更好的方法吗?

我真的不喜欢我所做的事情所以我对任何更好的想法持开放态度,必须易于维护,因为它可以在很多地方完成

    declare @doRunIt bit
    declare @checkAllNull varchar(max)
    declare @sumOfInt int

    set @checkAllNull = ''
    set @checkAllNull = @checkAllNull + coalesce(@param1,'')
    set @checkAllNull = @checkAllNull + coalesce(@param2,'')
    set @checkAllNull = @checkAllNull + coalesce(@param3,'')
    set @checkAllNull = @checkAllNull + coalesce(@param4,'')
    set @checkAllNull = @checkAllNull + coalesce(@param5,'')
    set @checkAllNull = @checkAllNull + coalesce(@param6,'')

    set @sumOfInt = coalesce(@param7,0)+coalesce(@param8,0)+
                    coalesce(@param9,0)+coalesce(@param10,0)+
                    coalesce(@param11,0)+coalesce(@param12,0)

    set @checkAllNull = @checkAllNull + cast(@sumOfInt as varchar(max))



    if ( isnumeric(@checkAllNull)=1 )
        if (cast(@checkAllNull as int) > 0)
            set @doRunIt = 1
        else
            set @doRunIt = 0
    else
        if (ltrim(rtrim(@checkAllNull)) <> '')
            set @doRunIt = 1
        else
            set @doRunIt = 0

最终目标是在DB中将所有参数为空或使用默认值的代码移动进行插入空行的检查,以便其他应用程序可以调用相同的存储过程而无需处理检查空行。

1 个答案:

答案 0 :(得分:2)

您的代码

DECLARE @IsValid BIT = dbo.IsValidParameter(@param1) & 
                       dbo.IsValidParameter(@param2) & 
                       dbo.IsValidParameter(@param3) & 
                       dbo.IsValidParameter(@param4)

辅助功能

CREATE FUNCTION dbo.IsValidParameter(@p1 Sql_Variant)
RETURNS bit
AS
BEGIN
    IF @p1 IS NULL OR @p1 = '' OR @p1 = 0
        RETURN 0    
    RETURN 1    
END
GO