SQL Server 2008 R2 (.Net 3.5) にデプロイされた C# ストアド プロシージャを作成しており、オプションのパラメーターを null 許容 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
次のコンパイル時エラーが発生します。
'System.Data.SqlTypes.SqlGuid' 型への標準変換がないため、'< null >' 型の値を既定のパラメーターとして使用することはできません。
それで、私はこれに頼りました:
, SqlGuid sID = "00000000-0000-0000-0000-000000000000"
コード内のその文字列をテストするのは面倒だと感じたので、これはやりたくありませんでした。ただし、次のコンパイルエラーが発生するため、それも機能しません。
'System.Guid' 型への標準変換がないため、'string' 型の値を既定のパラメーターとして使用することはできません。
ああ、4つの異なるアプローチがありますが、どれも機能しません。 はぁ
あなたの考えや正しい方向へのプッシュをお願いします。