[英]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
TEXT
, NTEXT
或IMAGE
數據類型。 從SQL Server 2005版本開始,已經棄用了13年,SQL Server 2005版本引入了MAX
數據類型來替換那些舊的Blob類型。 CHAR(1 - 8000)
, VARCHAR(1 - 8000)
或VARCHAR(MAX)
。 而且我也不認為它喜歡NCHAR
。 您可以選擇: NCHAR(1 - 4000)
NVARCHAR(MAX)
NCHAR(1 - 4000)
或NVARCHAR(MAX)
。 這些都映射到SqlString
和SqlChars
。 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.