是否可以创建一个包含所有参数的存储过程,这些参数都是可选的,但必须至少提供一个参数?
例如,如果我有一个更新记录的过程,我必须传入一个记录ID,然后至少要更新一列。该程序应检查以确保至少提供一个附加参数/列。
答案 0 :(得分:2)
我会将if语句作为第一个动作。
IF @param1 is null and @param2 isnul and @param3 is null
Begin
--steps tpo raise an error or exit the proc
End
答案 1 :(得分:1)
我会用我选择的编程语言而不是存储过程执行此操作。为什么?这是TSQL不太擅长的逻辑检查类型;检查这个的语法将是“icky”,它会很慢。
此外,存储过程为您提供的最大性能优势是运行已编译的SQL。在这种情况下,由于SQL需要动态构建,因此您将失去这一优势。那么,为什么它作为存储过程?
答案 2 :(得分:0)
在where子句
中使用以下内容where
(isnull(@param1,0)=0 or id=@param1)
and
(isnull(@param2,'')='' or name=@param2)