我已经在Visual (VS)中创建了一个存储过程。在成功创建程序集后尝试安装该过程时,将得到以下错误:
sp_GetDistanceAndTime的创建过程失败,因为参数"@Profile“的types和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发布于 2018-05-25 15:44:16
TEXT、NTEXT或IMAGE数据类型。这些已经被废弃了13年,从Server 2005的发行版开始,它引入了MAX数据类型来替换那些旧的blob类型。CHAR(1 - 8000)、VARCHAR(1 - 8000)或VARCHAR(MAX)。我觉得它也不喜欢NCHAR。您的选择是:NCHAR(1 - 4000)或NVARCHAR(MAX)。这两个映射都指向SqlString和SqlChars。SqlContext.Pipe.Send(string)相当于在T中使用PRINT .它只是显示在SSMS中的"Messages“选项卡中的一条消息。它既不是返回值,也不是OUTPUT参数。发布于 2018-05-25 16:23:58
一个快速示例(为您的情况修复大小等):
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参数数据。
https://stackoverflow.com/questions/50470930
复制相似问题