2017-03-17 101 views
0

運行它時我做一個聯盟的所有超過2級不同分貝的我得到這個錯誤時失敗:轉換轉換VARCHAR數據類型爲int,但沒有被定義爲int

消息245,級別16,狀態1,第16行 將varchar值「12037.5」轉換爲數據類型int時轉換失敗。

但我的列沒有一個是整數類型?出於某種原因,它將Main選擇類型更改爲整數。

DECLARE @SAGESTARTDATE AS DATETIME, 
     @SAGEENDDATE AS DATETIME, 
     @SAGEITEM AS NVARCHAR(50), 
     @SPSSTARTDATE AS DATETIME, 
     @SPSENDDATE AS DATETIME, 
     @SPSCOUNTRY AS NVARCHAR(50) 

set  @sagestartdate = '2017-01-15' 
set  @sageenddate = '2017-01-15' 
set  @sageitem = 'diesel 50ppm' 
set  @spsstartdate = '2017-01-15' 
set  @spsenddate = '2017-01-15' 
set  @spscountry = 'dRC' 


Select FleetNo, TxDate, Max(STCode) as StCode, SageRev, SageQty, Max(SagePrj) as SagePrj, 
     MAx(SPSType) as SPSType, MAx(SPSModel) as SPSModel, MAX(SPSSite) as SPSSite, Max(SPSCountry) as SPSCountry, 
     SPSFuel 
From (
     Select Strans.[Description] COLLATE SQL_Latin1_General_CP1_CI_AS as FleetNo 
       , Strans.TxDate as TxDate 
       , StMstr.Code as STCode 
       , Strans.[Reference] as SageRev  
       , Strans.Quantity as SageQty   
       , STrans.ProjectCode as SagePrj  
       , 0 AS SPSTYPE  
       , 0 AS SPSMODEL 
       , 0 AS SPSSITE 
       , 0 AS SPSCOUNTRY  
       , 0 as SPSFuel    

     from [KCS SARL].DBO._bvSTTransactionsFull STrans join 
      [KCS SARL].DBO._bvStockFull StMstr on STrans.AccountLink = StMstr.StockLink 

     Where Code = @SAGEITEM and Strans.TxDate BETWEEN @SAGESTARTDATE AND @SAGEENDDATE 

     UNION ALL 

      Select SPSTr.FleetNo as FleetNo 
        , SPSTR.ProdDate AS TxDate 
        , 0 as STCode 
        , 0 as SageRev 
        , 0 as SageQty 
        , 0 AS SagePrj  
        , SPSTR.EqType AS SPSTYPE  
        , SPSTR.ModelName AS SPSMODEL  
        , SPSTR.SiteName AS SPSSITE 
        , SPSTR.Country AS SPSCOUNTRY  
        , SPStr.Fuel as SPSFuel 

     From [SPS].dbo.DataInputTotal SPStr 
     Where SPStr.WCode = 102 and SPSTR.ProdDate BETWEEN @SPSSTARTDATE and @SPSENDDATE 
       AND SPSTR.Country = @SPSCOUNTRY 
    ) as Fuel 

    Group By FleetNo, TxDate, SageRev, SageQty, SPSFuel 

    Order by FleetNo 

enter image description here

enter image description here

回答

1

SPStr.WCode可能是一個varchar和102int。嘗試在單引號中包裝102

而且,如果所有這些類型的不是整數,工會將嘗試根據你的工會,這部分投他們作爲整數:

, 0 AS SPSTYPE 
, 0 AS SPSMODEL 
, 0 AS SPSSITE 
, 0 AS SPSCOUNTRY 
, 0 as SPSFuel 

, 0 as STCode 
, 0 as SageRev 
, 0 as SageQty 
, 0 AS SagePrj 
DECLARE @SAGESTARTDATE AS DATETIME, 
     @SAGEENDDATE AS DATETIME, 
     @SAGEITEM AS NVARCHAR(50), 
     @SPSSTARTDATE AS DATETIME, 
     @SPSENDDATE AS DATETIME, 
     @SPSCOUNTRY AS NVARCHAR(50) 

set  @sagestartdate = '2017-01-15' 
set  @sageenddate = '2017-01-15' 
set  @sageitem = 'diesel 50ppm' 
set  @spsstartdate = '2017-01-15' 
set  @spsenddate = '2017-01-15' 
set  @spscountry = 'dRC' 


Select FleetNo, TxDate, Max(STCode) as StCode, SageRev, SageQty, Max(SagePrj) as SagePrj, 
     MAx(SPSType) as SPSType, MAx(SPSModel) as SPSModel, MAX(SPSSite) as SPSSite, Max(SPSCountry) as SPSCountry, 
     SPSFuel 
From (
     Select Strans.[Description] COLLATE SQL_Latin1_General_CP1_CI_AS as FleetNo 
       , Strans.TxDate as TxDate 
       , StMstr.Code as STCode 
       , Strans.[Reference] as SageRev  
       , Strans.Quantity as SageQty   
       , STrans.ProjectCode as SagePrj  
       , '' AS SPSTYPE  
       , '' AS SPSMODEL 
       , '' AS SPSSITE 
       , '' AS SPSCOUNTRY  
       , '' as SPSFuel    

     from [KCS SARL].DBO._bvSTTransactionsFull STrans join 
      [KCS SARL].DBO._bvStockFull StMstr on STrans.AccountLink = StMstr.StockLink 

     Where Code = @SAGEITEM and Strans.TxDate BETWEEN @SAGESTARTDATE AND @SAGEENDDATE 

     UNION ALL 

      Select SPSTr.FleetNo as FleetNo 
        , SPSTR.ProdDate AS TxDate 
        , 0 as STCode 
        , 0 as SageRev 
        , 0 as SageQty 
        , 0 AS SagePrj  
        , SPSTR.EqType AS SPSTYPE  
        , SPSTR.ModelName AS SPSMODEL  
        , SPSTR.SiteName AS SPSSITE 
        , SPSTR.Country AS SPSCOUNTRY  
        , SPStr.Fuel as SPSFuel 

     From [SPS].dbo.DataInputTotal SPStr 
     Where SPStr.WCode = '102' and SPSTR.ProdDate BETWEEN @SPSSTARTDATE and @SPSENDDATE 
       AND SPSTR.Country = @SPSCOUNTRY 
    ) as Fuel 

    Group By FleetNo, TxDate, SageRev, SageQty, SPSFuel 

    Order by FleetNo 
+0

輝煌!謝謝你,這是造成這個問題的原因。 –

+0

@MardusDavel樂於幫助! – SqlZim

0

Strans.[Description] COLLATE SQL_Latin1_General_CP1_CI_AS as FleetNo爲varchar你正試圖與SPSTr.FleetNo as FleetNo這可能是int,這是你的錯誤將其轉換爲varchar的原因convert(SPSTr.FleetNo as varchar) as FleetNo

相關問題