转换未能数据类型INT
我有返回数据的这两个存储的过程:转换未能数据类型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数据类型时失败。
如果要返回值,请使用函数。但在这种情况下,由于execute
,您无法这样做。因此,使用输出参数:根据您的execute
声明
CREATE FUNCTION [dbo].[spCaller] (
out_url nvarchar(255) output
) AS
BEGIN
EXECUTE spBuscarUrl 'MIREX-2017-00001', @url = @out_URL OUTPUT;
END;
,你似乎知道如何称呼这样的存储过程。
问题是这一行spCaller
:
RETURN convert(nvarchar(255),@URL);
的RETURN
语句只能返回INT
,不NVARCHAR
。如果您想从不是INT的Stored Produre返回任何东西,则需要使用输出参数或SELECT
。
使用选择在结束工作正常,但我可以使用asp网络代码调用返回值? @Thorsten Dittmar –
当然,您可以 - 以同样的方式从.NET中的任何其他SQL调用中获取数据。所有你需要做的就是创建一个'SqlCommand',将'CommandType'设置为'StoredProcedure',将'CommandText'设置为存储过程的*名称*。如果你只想要第一个记录的第一个值(这是你的案例的方式),那么你可以使用'ExecuteScalar'。 –
这个程序的要点是什么?除了调用另一个程序外,它没有做任何事情。为什么不直接调用spBuscarUrl? –
我想要的只是显示的网址,而不是填写。这就是为什么我有两个sp。 @SeanLange –