为什么我在SP中将varchar转换为数字时出错(sql server 2005) [英] Why I am getting an error converting varchar to numeric in SP (sql server 2005)

查看:59
本文介绍了为什么我在SP中将varchar转换为数字时出错(sql server 2005)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么我收到将varchar转换为数字的错误? Sp执行得很好。但是在exec sp上显示的值是显示的mentiioned错误。

Why I am getting an error converting varchar to numeric? Sp executes fine. But on exec sp with values the mentiioned error shown.

/****** 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

推荐答案

将SP分成几部分。在SQL Server Management Studio中运行它们,并尝试找出哪些区域引发错误。

或者,您可以尝试SQL SP调试 - 如何:调试存储过程 [ ^ ]
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[^]


你发布了期待任何人阅读所有内容的代码。哪些行给出错误?该错误几乎肯定与传入的值不是实际数字有关。 ISNUMERIC [ ^ ]自2005年以来一直受支持,所以你应该编写使用它的代码来决定何时尝试将值更改为一个数字(例如,在您的语句中添加AND ISNUMERIC(myCol),以便过滤掉非数字)
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 )


这篇关于为什么我在SP中将varchar转换为数字时出错(sql server 2005)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆