0

我一直在从“收购”表中找到各个“业绩”季度的债券原始余额。它在每个季度都有效,但是当我尝试在 2010Q1 运行查询时,我收到了以下通知:

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

4

2 回答 2

2

由于您在字段列表中没有显式转换,因此它必须是在ONWHERE子句中的隐式转换。

对于ON引起转换的子句,贷款标识符必须在一个表中定义为,在另一个表中定义nvarchar为 an int。这不太可能(尽管并非不可能 ;-)

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

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

于 2013-07-02T14:09:10.287 回答
1

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

试试这个你的位置:

Where a.[Zero Balance Code] = '97' or a.[Zero Balance Code] = '03'
于 2013-07-02T14:01:12.167 回答