Click here to Skip to main content
15,885,985 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Why I am getting an error converting varchar to numeric? Sp executes fine. But on exec sp with values the mentiioned error shown.
SQL
/****** Object:  StoredProcedure [dbo].[FETCH_SALARY_UPLOADED_DETAILS]    Script Date: 03/12/2014 18:16:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
  
/************************************************************  
Module    : C3PSPS  
Author    : Alexander 
Date    : 12/03/2014
Name    : FETCH_SALARY_UPLOADED_DETAILS 
Description   : FETCH THE SALARY UPLOADED DETAILS  
Parameters   :        
Tables    : Employee,Corporate,EmpSalary,CorproateFileUploadQueue  
Associated PL/SQLs :   
Warnings   :  
See Also   :  
exec [FETCH_SALARY_UPLOADED_DETAILS] 3,2014,'IBM',1
exec [FETCH_SALARY_UPLOADED_DETAILS] 5,2013,'0',0
************************************************************/  
  
ALTER PROCEDURE [dbo].[FETCH_SALARY_UPLOADED_DETAILS]  
(  
  @p_Month   INT,  
  @p_Year   INT,  
  @p_corporateid     VARCHAR(10), 
    @p_reportTypeId   INT  
  

)  
AS  
SET  NOCOUNT ON  
 BEGIN 
 DECLARE @p_error    VARCHAR(40)
DECLARE @FromDate DateTime
DECLARE @ToDate DateTime
DECLARE @loc_ToMonth INT
DECLARE @loc_ToYear INT
DECLARE @To_Day DATETIME
DECLARE @FromDateString VARCHAR(12)
DECLARE @ToDateString VARCHAR(12)

    SET @FromDateString = CAST((@P_Month) AS VARCHAR)+'/01/'+CAST((@p_Year) AS VARCHAR)
	SET @FromDate = CAST(@FromDateString AS DATETIME)
    print @FromDate
	--Setting the To month and To Year
	IF(@P_Month + 1 = 13)
		BEGIN
			SET @loc_ToMonth = 1	
			SET @loc_ToYear  = @p_Year + 1
			SET @ToDateString = CAST(@loc_ToMonth AS VARCHAR)+'/01/'+CAST (@loc_ToYear AS VARCHAR)
			print @ToDateString
		END
	ELSE
		BEGIN
			SET @loc_ToMonth = @P_Month 	   
			SET @loc_ToYear  = @p_Year 
			SET @ToDateString = CAST(@loc_ToMonth +1 AS VARCHAR)+'/01/'+CAST (@loc_ToYear AS VARCHAR)
		END
  
	SET @ToDate = CAST((@ToDateString) AS DATETIME)
	SET @ToDate = @ToDate


print @ToDate
 
  --To check and Fetch Salary Processed  under Salary Uploaded Details Fetching(Start Month) 
 if( @p_reportTypeId = 0)  
  begin  
 SELECT distinct E.EmpId ,E.CorporateId ,  
    
   isnull(E.FirstName,'')+' '+isnull(E.LastName,'') AS NAME, E.AccountNo,
  [dbo].[fnMaskCardNo](E.CardNo) as CardNo,
   ES.Salary AS Amount,

    CASE WHEN  E.FollowMOLWorkFlow=1 THEN 'YES'
    ELSE 'NO' END  as WPS,convert(VARCHAR,CUFQ.UploadedDate,103)  as Date
    
FROM         dbo.Employee E INNER JOIN
                      dbo.Corporate C ON C.CorporateId = E.CorporateId
                       INNER JOIN
                      dbo.EmpSalary ES ON ES.CorporateId = E.CorporateId
                      AND ES.EmpId=E.EmpId
                       INNER JOIN
                      dbo.CorporateFileUploadQueue CUFQ ON CUFQ.CorporateId= C.CorporateId 
                      
  
        WHERE  (E.CorporateId=@p_corporateid OR @p_corporateid='0') and
        ES.SALMONTH=@p_Month  and ES.SALYEAR=@p_Year
          AND ES.Mode in('U') 
          and CUFQ.UploadedDate is not null
          and C.IsDeleted=0 
          GROUP BY E.EmpId ,E.CorporateId,  
    
  isnull(E.FirstName,'')+' '+isnull(E.LastName,''),E.AccountNo, [dbo].[fnMaskCardNo](E.CardNo),E.FollowMOLWorkFlow,CUFQ.UploadedDate,ES.Salary
     end  
  --To check and Fetch Salary Non Processed Report under Salary Uploaded Details Fetching(Active Card at the end of month - Salary Month)
 else if( @p_reportTypeId = 1)  
   begin  
  
 SELECT distinct E.EmpId,E.CorporateId,  
    
   isnull(E.FirstName,'')+' '+isnull(E.LastName,'') AS NAME, E.AccountNo,
  [dbo].[fnMaskCardNo](E.CardNo) as CardNo,
    '0.00' AS Amount,
     CASE WHEN  E.FollowMOLWorkFlow=1 THEN 'YES'
    ELSE 'NO' END  as WPS,convert(VARCHAR,CUFQ.UploadedDate,103)  as Date
      FROM   dbo.Employee E INNER JOIN
                      dbo.Corporate C ON C.CorporateId = E.CorporateId 
                       INNER JOIN
                      dbo.CorporateFileUploadQueue CUFQ ON CUFQ.CorporateId= C.CorporateId     
                       WHERE
      --Fetching Employee Deatils having active card
      c3empregid not  in(
                           select c3empregid from employee where 
                    Isinactivatedfordeletion=1 AND 
                    EODblockedStatus = 1 AND Frozen = 'Y'
					and Actual_InactivationDate < @ToDate
					AND (CorporateId= @p_corporateId or @p_corporateId='0'))
                        
                        
                        AND (E.CardNo IS NOT NULL) AND E.CardStatus='L' AND  (E.CorporateId= @p_corporateId or @p_corporateId=0)  AND E.IsDeleted=0 
                         AND  E.RHFReceivedDate <= @ToDate
           --Excluding Salary Processed Details           
                      AND  E.c3empregid not in( 
					
					
					SELECT   E.c3empregid
        FROM         dbo.Employee E INNER JOIN
                      dbo.Corporate C ON C.CorporateId = E.CorporateId INNER JOIN
                      dbo.EmpSalary ES ON ES.CorporateId = E.CorporateId
                      AND ES.EmpId=E.EmpId
                       INNER JOIN
                      dbo.CorporateFileUploadQueue CUFQ ON CUFQ.CorporateId= C.CorporateId 
                      
  
        WHERE  (E.CorporateId=@p_corporateid OR @p_corporateid='0') and
        ES.SALMONTH=@p_Month  and ES.SALYEAR=@p_Year
          AND ES.Mode in('U') 
         and CUFQ.UploadedDate is not null
          and C.IsDeleted=0) 
          --GROUP BY  E.c3empregid)      
   
      
     
          
          
         
     
 end  
      
  

 END
Posted
Updated 14-Mar-14 20:10pm
v2

Break the SP into parts. Run each of them in SQL Server Management Studio and try to figure out which of these areas is throwing an error.
Alternatively, you can try SQL SP debugging - How to : Debug Stored Procedures[^]
 
Share this answer
 
You posted too much code to expect anyone to read it all. What lines give the error ? The error is almost certainly to do with the values being passed in that are not actual numbers. ISNUMERIC[^] has been supported since 2005, so you should write code that uses that to decide when to try to change a value in to a number ( for example, add AND ISNUMERIC(myCol) to your statement so it filters out non numbers )
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900