簡體   English   中英

SQLCLR存儲過程無法安裝

[英]SQLCLR stored procedure fails to install

我已經在Visual Studio(VS)中創建了一個存儲過程。 在成功創建程序集后嘗試安裝該過程時,出現錯誤消息:

sp_GetDistanceAndTime的CREATE PROCEDURE失敗,因為參數“ @Profile”的T-SQL和CLR類型不匹配。

我如何安裝它? 我的參數不正確嗎?

C#代碼:

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void SqlStoredProcedure1(SqlString Profile, SqlString StartPosition,
           SqlString Destination)
    {
        try
        {           
            SqlPipe sqlPipe = SqlContext.Pipe;
            string result;
            result = PTVRequest.InvokeService(Profile.ToString(),
                    StartPosition.ToString(), Destination.ToString());

            SqlContext.Pipe.Send(result);
        }
        catch (Exception ex)
        {
            SqlContext.Pipe.Send(ex.Message);
        }

    }
}

SQL代碼:

Create Procedure sp_GetDistanceAndTime(@Profile text, @StartPosition text,
 @Destination text)
AS 
External NAME GetPvt.StoredProcedures.SqlStoredProcedure1
go
  1. 切勿使用TEXTNTEXTIMAGE數據類型。 從SQL Server 2005版本開始,已經棄用了13年,SQL Server 2005版本引入了MAX數據類型來替換那些舊的Blob類型。
  2. SQLCLR API僅處理Unicode字符串(UTF-16LE),而不處理8位編碼。 因此,您不能使用CHAR(1 - 8000)VARCHAR(1 - 8000)VARCHAR(MAX) 而且我也不認為它喜歡NCHAR 您可以選擇: NCHAR(1 - 4000) NVARCHAR(MAX) NCHAR(1 - 4000)NVARCHAR(MAX) 這些都映射到SqlStringSqlChars
  3. SqlContext.Pipe.Send(string)等效於在T-SQL中使用PRINT 這只是一條消息,顯示在SSMS的“消息”選項卡中。 它既不是返回值也不是OUTPUT參數。

一個簡單的例子(根據您的情況確定大小等):

public static void SqlStoredProcedure1([SqlFacet(MaxSize=100)] string Profile,
[SqlFacet(MaxSize=200)] string StartPosition,
[SqlFacet(MaxSize=100)] string Destination)

和:

CREATE PROCEDURE sp_GetDistanceAndTime
   @Profile nVARCHAR(100), @StartPosition nVARCHAR(200), @Destination nVARCHAR(100)
   AS EXTERNAL NAME GetPvt.StoredProcedures.SqlStoredProcedure1

有關詳細信息,請參見映射CLR參數數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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