簡體   English   中英

如何從 CLR 存儲過程中獲取結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM