我正在编写一个部署在 SQL Server 2008 R2(所以 .Net 3.5)上的 C# 存储过程,并希望将一个可选参数声明为可为空的 guid。这是我首先尝试的:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void spCalcPerc(
SqlGuid pID
, SqlGuid sID = DBNull.Value
)
这因编译时错误而失败:
'sID' 的默认参数值必须是编译时常量
这是因为DBNull.Value
不是一个常数,这是一种痛苦。
所以我尝试将声明更改为:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void spCalcPerc(
SqlGuid pID
, Guid? sID = null
)
这可以编译,但现在我收到此部署错误:
部署错误:无法为参数 System.Nullable 创建类型
试:
, SqlGuid sID = null
给出这个编译时错误:
'< null >' 类型的值不能用作默认参数,因为没有标准转换为 'System.Data.SqlTypes.SqlGuid' 类型
所以感觉相当卡住了,我求助于这个:
, SqlGuid sID = "00000000-0000-0000-0000-000000000000"
我不想这样做,因为在代码中测试该字符串感觉就像一个杂物。但是,当我收到此编译错误时,这也不起作用:
'string' 类型的值不能用作默认参数,因为没有标准转换为 'System.Guid' 类型
Gah,4 种不同的方法,但它们都不起作用。 叹
将不胜感激您的想法或推动正确的方向。