2014-02-09 182 views
-1

以下SP返回以下錯誤: 將varchar值「AR118」轉換爲數據類型int時轉換失敗。將varchar值「AR118」轉換爲數據類型int時出現轉換失敗int

不知道是怎麼回事,在底部的測試SP調用它...

ALTER PROCEDURE [DBO]。[pa_ProyectoIngresar]

@IDUsuario varchar(20), 
@CodigoPais char(2), 
@Nombre varchar(255), 
@Alias char(25), 
@Sector char(3), 
@AporteFonPlata decimal(9), 
@AporteLocal decimal(9), 
@IDResponsable varchar(20), 
@Reembolsable char(1), 
@NoProyecto char(5) OUT 

AS 
BEGIN 

SET NOCOUNT ON; 
declare @Fecha datetime 
declare @No int 
set @No = 0 
set @Fecha = GetUtcDate() 
set @NoProyecto = '' 

Select @NoProyecto = max(NoProyecto) from Proyectos WHERE Substring(NoProyecto,1,2) = @CodigoPais 

if @NoProyecto is NULL 
    BEGIN 
    SET @NoProyecto = @CodigoPais + '101' 
    END 
else 
    begin 
     set @No = CAST(SUBSTRING(@NoProyecto, 3, 3) as int) + 1 
     set @NoProyecto = @CodigoPais + RIGHT('000' + CAST(@No AS Varchar(3)), 3) 
    end 

Insert Into Proyectos 
      (
      NoProyecto, Estado, FechaEstado, HoraEstado, Nombre, Alias, Sector, 
      AporteFonPlata, AporteLocal, AporteOtros, 
      AprobacionEstimada, AprobacionProbabilidad, IDResponsable, 
      FechaAbstracto, EstadoAbstracto, FechaPerfil, EstadoPerfil, 
      FechaPOperativa, EstadoPOperativa, FechaNegociacion, EstadoNegociacion, 
      FechaAprobacion, EstadoAprobacion, Reembolsable, 
      Objetivo, Componentes, Beneficiarios, Ubicacion, NoResolucion, 
      IDingresado, FechaIngresado, IDModificado, FechaModificado 
      ) 
VALUES  (
      @NoProyecto, 'INA', @Fecha, '', @Nombre, @Alias, @Sector, 
      @AporteFonPlata, @AporteLocal, 0, 0, '', @IDResponsable, 
      @Fecha, 'N', @Fecha, 'N', @Fecha, 'N', @Fecha, 'N', @Fecha, 'N', 
      @Reembolsable, '', '', '', '', '', 
      @IDUsuario, @Fecha, @IDUsuario, @Fecha 
      ) 

if scope_identity() is NULL 
    begin 
     set @NoProyecto = '' 
    end 

return @NoProyecto 

END

測試SP

declare @IDUsuario varchar(20) 
declare @CodigoPais char(2) 
declare @Nombre varchar(255) 
declare @Alias char(25) 
declare @Sector char(3) 
declare @AporteFonplata decimal(9,0) 
declare @AporteLocal decimal(9,0) 
declare @Reembolsable char(1) 
declare @IDResponsable varchar(20) 
declare @NoProyecto char(5) 

set @IDUsuario = 'TRESPONSABLE' 
set @CodigoPais = 'AR' 
set @Nombre = 'Ingreso Nuevo Proyecto' 
set @Alias = 'NUEVO' 
set @Sector = 'SOC' 
set @AporteFonplata = 25000000 
set @AporteLocal = 5000000 
set @Reembolsable = 'S' 
set @IDresponsable = 'TRESPONSABLE' 
set @NoProyecto = '' 

EXEC PA_ProyectoIngresar @IDUsuario, @CodigoPais, @Nombre, @Alias, @Sector, @AporteFonplata, @AporteLocal, @IDresponsable, @Reembolsable, @NoProyecto 
+0

線索是在你的代碼試圖AR118''字符串轉換''成int值的錯誤消息,因爲它有構成特徵'AR'不能被轉換成int是不可能的。 –

+0

這是我的問題,我無法找到SP試圖從char到int的轉換,我忽略了什麼? – user3238418

+0

表Proyectos中'NoProyecto'列的數據類型是什麼。 –

回答

0

這段代碼將值@NoProyecto設置爲字符串'AR001',並且當您嘗試將此字符串插入到表Proyectos的列NoProyecto中sql server會嘗試將其轉換爲INT數據類型。

我認爲列NoProyecto是一個INT列。

declare @CodigoPais char(2) 
declare @NoProyecto char(5) 
declare @No int 
set @No = 0 

set @CodigoPais = 'AR' 
set @NoProyecto = '' 

if @NoProyecto is NULL 
    BEGIN 
    SET @NoProyecto = @CodigoPais + '101' 
    END 
else 
    begin 
     set @No = CAST(SUBSTRING(@NoProyecto, 3, 3) as int) + 1 
     set @NoProyecto = @CodigoPais + RIGHT('000' + CAST(@No AS Varchar(3)), 3) 
    end 

SELECT @NoProyecto 
+0

Proyectos中的NoProyecto是char(5) – user3238418

相關問題