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);
至此,存儲過程返回值正常。