2014-04-01 1 views
0

AccountNo (varchar(50))이 있습니다. 내가 필터로 AccountNo를 사용하여 데이터를 검색 할 때 나는 내 데이터 테이블 구조는 다음과 같습니다SQL Server 2005에서 varchar를 데이터 유형 int로 변환하는 동안 오류가 발생했습니다

enter image description here

다음과 같은 오류 MSG를 얻을 :

enter image description here

나에게 오류를 준 내 코드를 is

SELECT 
    Date, particular, 
    flag_voucherType +' '+ CONVERT(VARCHAR,C.billNo) AS [VoucherNo.], 
    Debit, Credit, Narration 
FROM 
    ((SELECT 
     Particular, flag_voucherType,accountNo,companyId 
     FROM 
     tblInsertParticularRecord 
     WHERE 
     Credit = 0 
     AND flag = CONVERT(VARCHAR(50), @accountNum) 
     AND companyId = @companyId) AS A 
INNER JOIN 
    (SELECT 
     CONVERT(Decimal,0) AS Debit, Debit AS Credit, accountNo,companyId, billNo 
    FROM tblInsertParticularRecord 
    WHERE 
     flag1 = 0 
     AND flag = CONVERT(VARCHAR(50), @accountNum) 
     AND companyId = @companyId) AS B ON A.accountNo = B.accountNo AND A.companyId = B.companyId) 
INNER JOIN 
    (SELECT 
      Date, billNo, companyId, Narration 
     FROM tblJournalDateNarrationDetails) AS C ON (B.billNo = C.billNo AND B.CompanyId = C.companyId) 
+0

어떤 값이 @companyId입니까? 정수 여야합니다. 및 @accountNum? – user3401335

+0

tblJournalDateNarrationDetails로 하나 이상의 테이블이 있고, pls는 해당 테이블의 스키마도 공유합니다. – AK47

+1

[잘못된 습관 : 잘못된 데이터 유형 선택] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data- type.aspx) - 항상 가장 적절한 데이터 유형을 사용해야합니다. –

답변

0

오류를 읽고 싶습니까? 너는 문자열의 lof를 밖으로 내 보냈지 만 - 짐작할 수 있겠지만, 그 문자열은 이미 int가 아니라는 것이 분명하다. 끝에있는 "-1-00-1"은 문자열을 변환 할 수있는 것이 아닙니다. 요구 사항이있는 도면 보드로 돌아갑니다.

귀하의 계정은 코드화 된 문자열 ("-"가 섞여 있음)이며,이 경우 변환을 호출하기 전에 잉여 기호를 제거하기 위해 심각한 문자열 조작이 필요합니다. 누군가가 실제로 확인하지 않아도됩니다. 계정 번호가 문자열인지 여부. 당신은 변환 함수에서 그 유형의 문자열을 던지지 않고 마술처럼 작동 할 것으로 기대합니다.

아마도 숫자는 코드입니다. 비즈니스 의미가 있지만 프로그램에 일련의 문자가있는 코드 일 수 있습니다. 그렇다면 숫자를 실수로 변환해서는 안됩니다. 그들을 문자열로 저장하십시오.

관련 문제