2016-05-24 28 views
-1

次のストアドプロシージャでエラーが発生します。私はSQLに新しいですし、現在ではないパーまでまだとにかく、ここで私は渡している値であることを言いたい:メッセージ248、レベル16、状態1、行1 varchar値 '60811404740101-60811404740102'の変換がint列をオーバーフローしました

ALTER PROCEDURE [dbo].[csp_WellTestValidationResults_GetData] 
    -- Declare variables that will get data passed from PIAF to query data 
    (@ColumnName varchar(max) = 'Blank', 
    @ColumnValue varchar(max) = 'Blank') 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF (@ColumnName = 'API14-2') 
    BEGIN 
     DECLARE @APIStrip varchar(max); 
     SET @APIStrip = SUBSTRING(@ColumnName, 0, CHARINDEX('- ', @ColumnName, 0)); 

     DECLARE @LeftNumber varchar(max); 
     SET @LeftNumber = SUBSTRING(@ColumnValue, 0, CHARINDEX('-', @ColumnValue, 0)); 

     DECLARE @RightNumber varchar(max) 
     SET @RightNumber = SUBSTRING(@ColumnValue, CHARINDEX('-', @ColumnValue, 0) + 1, LEN(@ColumnValue)); 

     EXEC('Select * from dbo.SSIS_RTRM_WellTestValidationResults where '[email protected]+' = '[email protected]+' OR '[email protected]+' = '[email protected]+' order by TestDate Desc') 
    END 

    IF (@ColumnName = 'API14') 
    BEGIN 
     EXEC('Select * from dbo.SSIS_RTRM_WellTestValidationResults where '[email protected]+' = '''[email protected]+''' order by AssetName, ReservoirName, API14, TestDate Desc') 
    END 

    IF (@ColumnName <>'AssetName') or (@ColumnName <>'ReservoirName') or (@ColumnName <>'FieldName') 
    BEGIN 
     EXEC('Select wtvv.* from dbo.SSIS_RTRM_WellTestValidationResults wtvv join '+'(select WellId, Max(TestDate) AS TestDate from dbo.SSIS_RTRM_WellTestValidationResults wtv group by WellId)'+' wtvv1 on wtvv1.WellId = wtvv.WellId and wtvv1.TestDate = wtvv.TestDate where '[email protected]+' = '''[email protected]+''' order by AssetName, ReservoirName, API14') 
    END 

    IF (@ColumnName <>'AssetName') or (@ColumnName <>'ReservoirName') or (@ColumnName<> 'FieldName')or (@ColumnName <>'API14-2')or (@ColumnName <>'API') 
    BEGIN 
     SELECT * 
     FROM dbo.SSIS_RTRM_WellTestValidationResults 
     WHERE WellId = '' 
    END 
END 

USE [AFCache] 
GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[csp_WellTestValidationResults_GetData] 
         @ColumnName = N'API14-2', 
         @ColumnValue = N'60811404740101-60811404740102' 

SELECT 'Return Value' = @return_value 
GO 

、ここでは実際のストアドプロシージャです

私は、私は次のエラーを取得しておくクエリを実行する場合:

Msg 248, Level 16, State 1, Line 1
The conversion of the varchar value '60811404740101-60811404740102' overflowed an int column.

を私は、コードを介して行っていると私の問題と、なぜ私はこのエラーを取得していますが、ここで私は理解していません。

答えて

0

テーブルスキーマが表示されていない場合は、標準intデータタイプをAPI14カラムに使用することしか想定できません。あなたのコードを見て、ダッシュ( - )で大きな数字を分割する。これにより、左側と右側に数字60,811,404,740,10160,811,404,740,102が残されます。これは、最大intの値が2,147,483,647をはるかに超えています。あなたは9,223,372,036,854,775,807

+0

はい、私はその後、その後、ダッシュの左右を解析し、ダッシュで区切られた2つの値を渡しています私が解析した左と右の値に基づいてクエリの残りのコードを実行します。 @columevalueを型bigintに変更すると、ダッシュをどのように渡しますか?私は渡された数字を解析するためにダッシュを持っている必要があります。 – JPM1

+1

エラーはテーブルであり、パラメータではありません – TTeeple

+0

エラーはカラム 'API14'のデータタイプにあります。変数ではありません。変数は既に 'varcahr(max)'になっています。数値を分割し、数値が 'int'データ型のため大きすぎるので失敗している' API14'に数値を挿入しようとします。データ型を変更しても変数には影響しません。 – Matthew

0

の最大値を持つSSIS_RTRM_WellTestValidationResults表はAPI14-2のためのint型の列を持っているように見えるbigintであるためにあなたの列のデータ・タイプを更新する必要があります。あなたがあなたのテーブルスキーマを投稿したなら、それは助けになるでしょう。

+0

そのテーブルにはAPI14-2カラムがありません。私は実際には-2のコードを削除して、クエリで使用しないようにします。 API14の列はvarchar(max)です。 – JPM1

+0

テーブルスキーマを転記する必要があります。あなたが言うように何かが一致していません。 – TTeeple

0

このラインを交換してみてください。これにより

DECLARE @return_value int 

DECLARE @return_value [numeric](18, 0) 
関連する問題