我有两个返回数据的存储过程:
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时,转换失败。
答案 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
声明,您似乎知道如何调用此类存储过程。