2013-07-02 77 views
0

我一直在从“Acquisition”表中找到债券的原始余额,用于个人“性能”宿舍。它的工作每季度,但是当我试图在2010Q1运行我的查询,我接到了该通知:当将varchar值“N”转换为数据类型时,转换失败int

Msg 245, Level 16, State 1, Line 2 
Conversion failed when converting the varchar value 'N' to data type int. 

我的查询是:

SELECT ALL a.[LOAN IDENTIFIER] 
     ,[CHANNEL] 
     ,[SELLER NAME] 
     ,[ORIGINAL INTEREST RATE] 
     ,[ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)] 
     ,[ORIGINAL LOAN TERM] 
     ,[ORIGINATION DATE] 
     ,[FIRST PAYMENT DATE] 
     ,[ORIGINAL LOAN-TO-VALUE (LTV)] 
     ,[ORIGINAL COMBINED LOAN-TO-VALUE (CLTV)] 
     ,[NUMBER OF BORROWERS] 
     ,[ORIGINAL DEBT-TO-INCOME RATIO] 
     ,[CREDIT SCORE] 
     ,[FIRST-TIME HOME BUYER INDICATOR] 
     ,[LOAN PURPOSE] 
     ,[PROPERTY TYPE] 
     ,[NUMBER OF UNITS] 
     ,[OCCUPANCY STATUS] 
     ,[PROPERTY STATE] 
     ,[ZIP (3-DIGIT)] 
     ,[MORTGAGE INSURANCE PERCENTAGE] 
     ,[PRODUCT TYPE] 
    FROM dbo.Performance_2010Q1 a join dbo.TotalAcquisition b on a.[Loan Identifier] = b.[LOAN IDENTIFIER] 

Where a.[Zero Balance Code] = 97 or a.[Zero Balance Code] = 03 

零余额码说的是债券如何违约,我根据每个债券的‘贷款标识符’

由于这两个表之间的匹配! :-D

+2

“2010Q1”范围中的其中一列的值为“N”,而列中的其他值为整数。查看个人“Performance_2010Q1”和“TotalAcquisition”表,找到包含“N”的列,并解决了问题。 – LittleBobbyTables

+2

显然你有一个varchar列,你正在比较一个数值。请提供您的表格定义。 –

回答

2

既然你在字段列表中没有明确的转换,它必须是一个隐式转换无论是在ONWHERE子句。

对于ON子句引起转换,贷款标识符将具有在一到被定义为nvarchar,和如在其它表中的int。这是不可能的(虽然不是不可能;-)

所以我怀疑你的WHERE条款。 IF 零余额代码被定义为nvarchar和您正在使用int(97或3),这会导致的隐式转换的比较。如果您的表中只有一个包含字符的条目,则此隐式转换将失败。 避免这种情况的一种方法是用字符串定义WHERE子句(例如WHERE A.[Zero Balance Code] = '97''03'的子句相同)。一个稍微优雅的方法是用ISNUMERIC检查数字数据。因为您如何知道余额代码始终为'03',而不仅仅是'3'?这些条目将被过滤掉,因为'3'不等于'03' ...

但要小心:
这可能忽略了真正的问题。 这里最大的问题是,为什么突然你的表中有非数字数据!你需要检查你是否有损坏的数据输入到你的系统。

+0

谢谢,它的工作原理!我仍然会重新检查它是否损坏。 – user2501627

1

是否有在[零余额代码]的值不能转换为int?

试试这个你那里caluse:

Where a.[Zero Balance Code] = '97' or a.[Zero Balance Code] = '03' 
相关问题