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 valid
null
質問
uniqueidentifier
戻り値が時々 である場合、CLR 関数から aを返す適切な方法は何null
ですか?