SQL Server 2008 R2 の CLR 関数を作成しています。CLR 関数は を返しますがuniqueidentifier、これは の場合もありますnull。戻り値が でない null場合に機能します。ただし、null値が返されると、SQL Server はエラーをスローします。Specified cast is not valid.
関数はデータベースに次のように登録されます。
create function MyFunc returns uniqueidentifier as external name AssemblyName.UserDefinedFunctions.MyFunc
サンプルコード
[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static Guid MyFunc()
{
using (SqlConnection con = new SqlConnection("context connection=true"))
{
con.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = "select cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)";
//cmd.CommandText = "select cast(null as uniqueidentifier)";
return (Guid)cmd.ExecuteScalar();
}
}
}
最初CommandTextは機能し、2 番目はエラーをスローしSpecified cast is not validます。
2行目と12行目で戻り値の型を から に変更しようとしGuidましたが、値がそうであるかどうかに関係なくSqlGuid、SQL Serverは常にエラーをスローします。Specified cast is not validnull
質問
uniqueidentifier戻り値が時々 である場合、CLR 関数から aを返す適切な方法は何nullですか?