我在 MSSQL 2005 Server SQLCLR 中有一个存储过程。是否可以为它定义一个可选参数?如果是这样,怎么做?
问问题
1934 次
3 回答
1
想到的最快的(如果不是最简洁的)解决方案是使用带有默认值的可选参数的“shim”存储过程,该存储过程使用这些默认值调用内部存储过程,就像您对“可选”参数使用方法重载一样C# 3 及更早版本。
于 2009-04-05T11:53:15.820 回答
1
只为你想要默认的值传入 Nulls 有什么问题吗?
当然,这可能并非在所有情况下都有效。
有时您可能想知道实际值是否确实为 Null,因此避免使用默认值。
如果是这种情况,那么我会求助于添加一个额外的“默认”参数。
[Microsoft.SqlServer.Server.SqlProcedure]
public static void MySproc(SqlInt32 pID, SqlBoolean UseDefault_pID)
{
pID = (UseDefault_pID == SqlBoolean.True && pID == SqlInt32.Null)
? SomeDefaultPIDValue : pID;
}
这样就不必编写额外的“包装器”存储过程来接收具有默认值的可选参数,然后调用您的 CLR 存储过程。
传入 Null 时使用默认值:UseDefault_pID = 1 传入 Null
时保留实际值:UseDefault_pID = 0
于 2012-10-10T00:34:45.490 回答
-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 的人。
使用非空值传递两者将找到具有指定 fname 和 lname 的所有人员。
于 2009-04-05T13:54:26.653 回答