0

個々の「パフォーマンス」四半期について、「取得」テーブルから債券の元の残高を見つけています。すべての四半期で機能しましたが、2010 年第 1 四半期にクエリを実行しようとしたときに、次の通知を受け取りました。

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

ゼロ残高コードは、債券がどのようにデフォルトしたかを示しています。各債券の「ローン識別子」に基づいて 2 つのテーブルを照合しています。

ありがとう!:-D

4

2 に答える 2

2

フィールド リストに明示的な変換がないため、句ON内またはWHERE句内の暗黙的な変換である必要があります。

ON節で変換が行われるようにするには、ローンIDを 1 つのテーブルで定義しnvarchar、もう 1 つintのテーブルで として定義する必要があります。これはありそうもありません (不可能ではありませんが ;-)

WHEREだから私はあなたの条項を疑っています。IFゼロ バランス コードが定義されてnvarcharおり、(97 または 3) と比較するとint、暗黙の変換が発生します。テーブルに文字を含むエントリが 1 つしかない場合、この暗黙的な変換は失敗します。これを回避する 1 つの方法は、WHERE句を文字列で定義することです (たとえばWHERE A.[Zero Balance Code] = '97'、 についても同じです'03')。もう少し洗練された方法の 1 つは、ISNUMERICを使用して数値データをチェックすることです。'03'残高コードがだけでなく常に であることをどうやって知るの'3'でしょうか? '3'と等しくないため、これらのエントリは除外され'03'ます。

ただし、注意してください。
これは、実際の問題を無視している可能性があります。 ここでの大きな疑問は、なぜ突然テーブルに数値以外のデータが含まれているのかということです! システムに入力されたデータが破損していないかどうかを確認する必要があります。

于 2013-07-02T14:09:10.287 に答える
1

a.[Zero Balance Code] に int にキャストできない値はありますか?

あなたのwhere caluseのためにこれを試してください:

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