我在MSSQL 2005 Server SQLCLR中有一个存储过程。 是否可以为它定义一个可选参数? 如果是这样,怎么样?
答案 0 :(得分:1)
最快,即使不是最整洁的解决方案是使用一个'shim'存储过程,其默认值为可选参数,使用这些默认值调用内部存储过程,就像使用方法重载'可选'C#3及更早版本中的参数。
答案 1 :(得分:1)
对于你想要默认的值传递Nulls有什么问题吗? 当然,这可能不适用于所有情况 有时您可能想知道实际值是否确实为空,因此避免使用默认值 如果是这种情况,那么我会采用额外的“默认”参数。
[Microsoft.SqlServer.Server.SqlProcedure]
public static void MySproc(SqlInt32 pID, SqlBoolean UseDefault_pID)
{
pID = (UseDefault_pID == SqlBoolean.True && pID == SqlInt32.Null)
? SomeDefaultPIDValue : pID;
}
这节省了必须编写额外的“ wrapper ”sprocs来接受带有默认值的可选参数,然后调用你的CLR sproc。
在Null传入时使用默认值:UseDefault_pID = 1
在Null传入时保持实际值:UseDefault_pID = 0
答案 2 :(得分:-1)
您可以将其传递为null,然后执行以下操作:
create proc sp_find_person
@fname varchar(30)
@lname varchar(60)
as
begin
select * from person a
where (a.fname = @fname or @fname is null)
and (a.lname = @lname or @lname is null);
end
go
将两个参数传递为null将返回person中的所有行。
使用值传递@fname并且@lname为null将返回具有该@fname的所有人。
使用值传递@lname并且@fname为null将返回具有该@lname的所有人员。
使用非null值传递两者将查找具有指定fname和lname的所有人。