[英]How to get a result from CLR stored procedure
我在 c# 中有一個 CLR 存儲過程,類似於
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void DecimalToWords (decimal sum)
{
SqlPipe pipe = SqlContext.Pipe;
SqlMetaData[] cols = new SqlMetaData[1];
cols[0] = new SqlMetaData("Sum", SqlDbType.NVarChar, 1024);
SqlDataRecord rec = new SqlDataRecord(cols);
string result = sum.ToString();
pipe.SendResultsStart(rec);
rec.SetSqlString(0, new SqlString(result));
rec.SetSqlString(0, new SqlString("End of result"));
pipe.SendResultsEnd();
}
}
我試着叫它
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[DecimalToWords]
@sum = 10002
SELECT 'Return Value' = @return_value
GO
這將 @return_value 返回為 0,並將實際過程的結果作為一個空表返回,其中包含單個列名“sum”,我認為這意味着實際過程有效。
我也嘗試通過調用它
DECLARE @return_value int
Declare @tep_table table
(
Sum varchar(1024)
)
Insert into @tep_table
EXEC @return_value = [dbo].[DecimalToWords]
@sum = 123
Select * From @tep_table
這也返回一個空表。
如何從我的程序中獲取“結果”字符串的值? 我的程序代碼有問題嗎? 我是否調用了錯誤的程序?
您缺少SendResultsRow
:
pipe.SendResultsStart(rec);
rec.SetSqlString(0, new SqlString(result));
rec.SetSqlString(0, new SqlString("End of result"));
pipe.SendResultsRow(rec);
pipe.SendResultsEnd();
在您的示例中,您實際上並不需要 Start/Row/End,但我認為這只是一個示例。 消費結果時,只需執行過程,結果集就會發送給客戶端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.