Sql 从不工作的存储过程返回字符串值
我已经创建了一个存储过程,它应该返回一个字符串值,根据该字符串值执行操作。这些查询都可以正常工作,除了@return_值(“将varchar值转换为int”)出现错误。我尝试在查询中强制转换这两个值,但都不起作用 我收到的错误是:Sql 从不工作的存储过程返回字符串值,sql,sql-server,sqldatatypes,Sql,Sql Server,Sqldatatypes,我已经创建了一个存储过程,它应该返回一个字符串值,根据该字符串值执行操作。这些查询都可以正常工作,除了@return_值(“将varchar值转换为int”)出现错误。我尝试在查询中强制转换这两个值,但都不起作用 我收到的错误是: Conversion failed when converting the varchar value 'Request ID: 454 captured on 2017-04-25 10:16:07' to data type int. 这是我所做工作的s
Conversion failed when converting the varchar value 'Request ID: 454 captured on 2017-04-25 10:16:07' to data type int.
这是我所做工作的sql代码:
USE [VehicleManagement]
GO
/****** Object: StoredProcedure [dbo].[spSaveContractsCaptured]
Script Date: 2017/04/23 8:56:10 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_SaveContractsCaptured]
@VehicleServiceRequestID int,
@InvoiceNo nvarchar(50),
@Amount decimal(18, 2),
@OdometerReading float,
@ExpiryDate datetime,
@ServiceDate datetime,
@CapturedBy nvarchar(50),
@CapturedDate datetime,
@ContractStartDate datetime,
@PeriodExpiry nvarchar(50),
@returnVal nvarchar(255) output
AS
BEGIN
SET NOCOUNT ON
IF NOT EXISTS (SELECT ID FROM [VehicleManagement].[dbo].[VehicleService_Captured]
WHERE VehicleServiceRequestID = @VehicleServiceRequestID )
BEGIN
INSERT INTO [VehicleService_Captured] (VehicleServiceRequestID, InvoiceNo,
Amount, OdometerReading, ExpiryDate, ServiceDate, CapturedBy, CapturedDate, ContractStartDate, PeriodExpiry)
VALUES (@VehicleServiceRequestID, @InvoiceNo, @Amount, @OdometerReading, @ExpiryDate, @ServiceDate,
@CapturedBy, @CapturedDate, @ContractStartDate, @PeriodExpiry)
set @returnVal = SCOPE_IDENTITY()
RETURN CAST(@returnVal AS VARCHAR(255))
end
else
SET @returnVal = (SELECT 'Request ID: ' + convert(varchar,ID) + ' captured on ' + convert(varchar,[CapturedDate],120) FROM [VehicleManagement].[dbo].[VehicleService_Captured]
WHERE VehicleServiceRequestID = @VehicleServiceRequestID)
RETURN CAST(@returnVal AS nvarchar(255))
END
是否有我遗漏的东西或我做错了什么?由于Triv指向了正确的方向,您应该只设置输出变量的值并删除返回值
USE [VehicleManagement]
GO
/****** Object: StoredProcedure [dbo].[spSaveContractsCaptured]
Script Date: 2017/04/23 8:56:10 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_SaveContractsCaptured]
@VehicleServiceRequestID int,
@InvoiceNo nvarchar(50),
@Amount decimal(18, 2),
@OdometerReading float,
@ExpiryDate datetime,
@ServiceDate datetime,
@CapturedBy nvarchar(50),
@CapturedDate datetime,
@ContractStartDate datetime,
@PeriodExpiry nvarchar(50),
@returnVal nvarchar(255) output
AS
BEGIN
SET NOCOUNT ON
IF NOT EXISTS (SELECT ID FROM [VehicleManagement].[dbo].[VehicleService_Captured]
WHERE VehicleServiceRequestID = @VehicleServiceRequestID )
BEGIN
INSERT INTO [VehicleService_Captured] (VehicleServiceRequestID, InvoiceNo,
Amount, OdometerReading, ExpiryDate, ServiceDate, CapturedBy, CapturedDate, ContractStartDate, PeriodExpiry)
VALUES (@VehicleServiceRequestID, @InvoiceNo, @Amount, @OdometerReading, @ExpiryDate, @ServiceDate,
@CapturedBy, @CapturedDate, @ContractStartDate, @PeriodExpiry)
set @returnVal = SCOPE_IDENTITY()
END
ELSE
SET @returnVal = (SELECT 'Request ID: ' + convert(varchar,ID) + ' captured on ' + convert(varchar,[CapturedDate],120) FROM [VehicleManagement].[dbo].[VehicleService_Captured]
WHERE VehicleServiceRequestID = @VehicleServiceRequestID)
END
调用过程时,应声明一个变量,并将其与“out”一起使用,如:
另外,请确保您的邮件中包含255个字符就足够了。
希望有帮助,干杯!返回仅用于给出错误级别。
您不应该返回结果,只设置结果就足够了。
返回类型 可选地返回int 这可以帮助你
declare @message nvarchar(255)
exec [dbo].[sp_SaveContractsCaptured] //list parameteres, @returnval = @message out