将nvarchar值转换为datatype int时转换失败

时间:2017-10-17 11:41:13

标签: sql sql-server stored-procedures

我有两个返回数据的存储过程:

ALTER proc [dbo].[spBuscarUrl]
@CodigoContrato nvarchar(255),  
@url nvarchar(255) OUTPUT  
AS    

    SET NOCOUNT ON;  
    SELECT @url = url  
    FROM v_compras_y_contrataciones AS cc  
    WHERE CodigoContrato = @CodigoContrato;  
RETURN  

当我尝试返回第二个存储过程的值时,错误显示:

ALTER procedure [dbo].[spCaller]
AS BEGIN
DECLARE @URL nvarchar(255);  
EXECUTE spBuscarUrl  
    'MIREX-2017-00001', @url = @URL OUTPUT;  
RETURN convert(nvarchar(255),@URL);  
END

消息245,级别16,状态1,过程spCaller,第6行 将nvarchar值“https://comunidad.comprasdominicana.gob.do//Public/Tendering/OpportunityDetail/Index?noticeUID=DO1.NTC.2”转换为数据类型int时,转换失败。

2 个答案:

答案 0 :(得分:4)

问题在于spCaller

中的这一行
RETURN convert(nvarchar(255),@URL); 

RETURN语句只能返回INT,而不是NVARCHAR。如果要从不是INT的Stored Produre返回任何内容,则需要使用输出参数或SELECT

答案 1 :(得分:0)

如果要返回值,请使用函数。但是,在这种情况下,由于execute,您无法做到这一点。所以使用输出参数:

CREATE FUNCTION [dbo].[spCaller] (
    out_url nvarchar(255) output
) AS
BEGIN
    EXECUTE spBuscarUrl 'MIREX-2017-00001', @url = @out_URL OUTPUT;  
END;

根据您的execute声明,您似乎知道如何调用此类存储过程。