2017-10-17 118 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'。 –

相關問題