2014-02-09 148 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

相关问题