1.sql server CLR项目中的存储过程实例:
[SqlProcedure]
public static SqlInt32 spSearchFulltextMall(SqlString keywords, SqlString excludedKeywords, SqlInt32 startRow, SqlInt32 endRow)
{
// 在此处放置代码
int result=-1;
return result;
}
2.在类库中调用以上存储过程,接收存储过程的返回值:
parameters[n] = new SqlParameter("returnValue", SqlDbType.Int);
parameters[n].Direction = ParameterDirection.ReturnValue;
其中n为parameters.Length - 1。
接收返回值:var count = (int)(parameters[parameters.Length - 1].Value ?? 0);
3.问题:
在sql 2005中有返回值,而在sql 2008中有时没有返回值,当把sql server CLR项目重新部署,在大约半天时间内有返回值,之后便恢复到之前无返回值状态。
4.解决办法:
a.修改存储过程:
[SqlProcedure]
public static void spSearchFulltextMall(SqlString keywords, SqlString excludedKeywords, SqlInt32 startRow, SqlInt32 endRow,out SqlString result)
{
// 在此处放置代码
result=-1;
}
b.修改接收参数:
parameters[n] = new SqlParameter("returnValue", SqlDbType.Int);
parameters[n].Direction = ParameterDirection.Output;
其中n为parameters.Length - 1。
接收返回值:var count = (int)(parameters[parameters.Length - 1].Value ?? 0);
至此,存储过程返回值正常。
本文介绍了一个关于 SQL Server CLR 存储过程中返回值的问题及其解决方案。该问题表现为在 SQL Server 2005 中能正常获取返回值,但在 SQL Server 2008 中偶尔无法获取。通过调整存储过程签名及参数方向,最终解决了这一问题。

被折叠的 条评论
为什么被折叠?



