2017-03-17 117 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

相关问题