2017-04-25 6 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 

はTrivが指摘したように、私が行方不明ですか私が間違って何をやっている

+4

これはあなたを助けることができますhttp://stackoverflow.com/questions/6450194/how-to-return-string-value-from-the-stored-procedure – TriV

答えて

2

を何かがあります私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のメッセージで十分です。 うれしいです、歓声!

関連する問題