2017-10-17 57 views
0

我有返回数据的这两个存储的过程:转换未能数据类型INT

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

这个程序的要点是什么?除了调用另一个程序外,它没有做任何事情。为什么不直接调用spBuscarUrl? –

+0

我想要的只是显示的网址,而不是填写。这就是为什么我有两个sp。 @SeanLange –

回答

0

如果要返回值,请使用函数。但在这种情况下,由于execute,您无法这样做。因此,使用输出参数:根据您的execute声明

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

,你似乎知道如何称呼这样的存储过程。

3

问题是这一行spCaller

RETURN convert(nvarchar(255),@URL); 

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

+0

使用选择在结束工作正常,但我可以使用asp网络代码调用返回值? @Thorsten Dittmar –

+0

当然,您可以 - 以同样的方式从.NET中的任何其他SQL调用中获取数据。所有你需要做的就是创建一个'SqlCommand',将'CommandType'设置为'StoredProcedure',将'CommandText'设置为存储过程的*名称*。如果你只想要第一个记录的第一个值(这是你的案例的方式),那么你可以使用'ExecuteScalar'。 –

相关问题