SQL Server的C#编写的,因为它有SqlInt32参数的.NET 2.0框架的存储过程。 我试图使参数可选。 下面是只是打印传递给它的整数最小的测试案例:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void TestProc(
SqlInt32 TestInt
)
{
SqlPipe pipe;
pipe = SqlContext.Pipe;
if (TestInt.IsNull)
{
pipe.Send("NULL value passed");
}
else
{
pipe.Send(TestInt.ToString());
}
}
这些命令执行预期,并且打印“1”和“NULL值传递”,分别为:
exec dbo.TestProc @TestInt = 1
exec dbo.TestProc @TestInt = null
然而,我的目标是分配NULL来@TestInt的默认,这将让我只执行下面的命令:
exec dbo.TestProc
我不能找到一种方法来提供一个默认值到.NET代码中的参数。 从我可以通过谷歌搜索发现,.NET 4.0支持可选参数,因此想必.NET 2.0没有。 和(天真)改变参数声明这样给人“默认参数说明符不准”的错误:
SqlInt32 TestInt = SqlInt32.Null
我也试图通过将此代码重载方法:
public static void TestProc()
{
SqlInt32 intNull;
intNull = SqlInt32.Null;
TestProc(intNull);
}
这完全编译,但不能部署:VS显示错误“重载方法,属性或字段不支持”。 所以在这一点上,我卡住了。
真正的用例当然是更复杂的:它是调用存储过程来处理日志消息TSQL日志模块。 该处理程序在运行时动态识别,并调用代码不知道它是否调用TSQL或.NET PROC。 这要求所有的程序,以支持相同的参数,还有几个是可选的。 调用代码已经在生产,所以我想,以避免改变它的每一个参数传递每个调用。 在TSQL特效,这不是一个问题,因为可选参数是容易的,但显然不是在.NET。