我正在为 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
有效,第二个抛出Specified cast is not valid
错误。
Guid
我尝试在第 2 行和第 12行将返回类型从更改为SqlGuid
,但是 SQL Server 总是抛出Specified cast is not valid
错误,无论该值是否null
。
问题
uniqueidentifier
当返回值有时是时,从 CLR 函数返回 a 的正确方法是null
什么?