2017-04-25 42 views
1

我已經創建了一個存儲過程,該過程應根據所採取的操作返回字符串值。查詢是所有工作正常,除了我得到@return_value(「將varchar值轉換爲int)的錯誤...我試着鑄造兩個值與查詢,但它不工作...從存儲過程返回字符串值不起作用

錯誤我收到:

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 

有我丟失的東西或我在做什麼錯

+4

這可以幫助您http://stackoverflow.com/questions/6450194/how-to-return-string-value-from-the-stored-procedure – TriV

回答

2

由於TRIV指出一世n個正確的方向,你應該只設置的輸出變量的值,並移除RETURN

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 

當你罵你的程序應該聲明一個變量,並以「」這樣使用它:

declare @message nvarchar(255) 
exec [dbo].[sp_SaveContractsCaptured] //list parameteres, @returnval = @message out 

另外請確保255是足夠您的消息。 希望它有幫助,歡呼!