2017-10-17 2 views
0

zu Datentyp Ich habe diese zwei gespeicherte Prozedur, die Daten zurückgeben:Fehler bei der Konvertierung, wenn der nvarchar Wertes Umwandlung 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 

Wenn ich versuche, den Wert für die zweite gespeicherte Prozedur zurückzukehren, wird der Fehler sagt:

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

Msg 245, Ebene 16, Status 1, Prozedur spCaller, Line 6 Fehler bei der Konvertierung, wenn der nvarchar Wert 'https://comunidad.comprasdominicana.gob.do//Public/Tendering/OpportunityDetail/Index?noticeUID=DO1.NTC.2' in dem Datentyp int konvertieren.

+0

Was ist der Sinn dieses Verfahrens? Es tut nichts anderes, als eine andere Prozedur aufzurufen. Warum nicht einfach spBuscarUrl anrufen? –

+0

Was ich will, ist nur die URL anzuzeigen und nicht zu füllen. Deshalb habe ich zwei sp. @SeanLange –

Antwort

0

Wenn Sie einen Wert zurückgeben möchten, verwenden Sie eine Funktion. In diesem Fall können Sie das wegen der execute nicht tun. So einen Ausgabeparameter verwenden:

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

Basierend auf Ihrer execute Aussage, Sie scheinen zu wissen, wie eine solche gespeicherte Prozedur aufzurufen.

3

Das Problem ist, diese Linie in spCaller:

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

Die RETURN Aussage nur INT zurückkehren kann, nicht NVARCHAR. Wenn Sie etwas von einem Stored Produre zurückgeben möchten, das kein INT ist, müssen Sie entweder einen Ausgabeparameter oder SELECT verwenden.

+0

mit der Auswahl am Ende funktioniert gut, aber kann ich den Rückgabewert mit ASP-net-Code aufrufen? @Thorsten Dittmar –

+0

Natürlich können Sie - genauso wie Sie Daten von jedem anderen SQL-Aufruf in .NET bekommen. Alles, was Sie tun müssen, ist ein 'SqlCommand' zu erstellen, den' CommandType' auf 'StoredProcedure' und den' CommandText' auf den * Namen * der gespeicherten Prozedur zu setzen. Sie können dann 'ExecuteScalar' verwenden, wenn Sie nur den ersten Wert des ersten Datensatzes wollen (was in Ihrem Fall der Fall ist). –

Verwandte Themen