0

SQL ServerManager2008。

最近、別のテーブルを参照するようにストアドプロシージャを変更しました。

それ以来、私は同じエラーを受け取り続けます:

「メッセージ245、レベル16、状態1、行1の変換は、varchar値「BC8018」をデータ型intに変換するときに失敗しました。」

ここで、クエリをルートに分割して、この問題が発生する場所を見つけ、新しいテーブルへのJOINで問題が発生していることを確認します。

ここで、テーブルで使用している唯一のフィールドImを比較しました。これは、ParetoとNewParetoの両方がintです。

コードは次のとおりです。

SELECT i.Acct,
   i.Name, 
   i.Document, 
   i.Part, 
   i.Qty, 
   i.Unit, 
   dbo.PeriodInsert.NewPareto,
   i.pg,
   i.[DateTime],
   i.BinSeqNo

FROM   
OPENQUERY(SACBAUTO, 'SELECT dbo.iHeads.acct,
                            dbo.iHeads.name,
                            dbo.iLines.Document,
                            dbo.iLines.Part,
                            dbo.iLines.Pg,
                            dbo.iLines.Qty,
                            dbo.iLines.unit,
                            dbo.iHeads.[DateTime], 
                            dbo.iLines.BinSeqNo 
                     FROM Autopart.dbo.iheads INNER JOIN Autopart.dbo.iLines ON 
                     Autopart.dbo.Iheads.document = autopart.dbo.iLines.document
                     WHERE dbo.iLines.Pg not in (''60'',''61'',''62'')

                      ') i
left JOIN
dbo.PeriodInsert
ON 
i.Part collate SQL_Latin1_General_CP1_CI_AS = dbo.PeriodInsert.NewPareto 
WHERE
 (i.[DateTime] BETWEEN '2012-03-01' AND '2012-08-23') AND
 i.Acct = '1557' 

これは元のストアドプロシージャの内訳ですが、ここでルートが発生することを覚えておいてください。奇妙だと思いますが、フィールドparetoを使用したNEWparetoという元のテーブルもintです。テーブルのせいで突然機能しなくなった理由はありますか?

さらに詳しい情報が必要な場合は、お知らせください。

どうもありがとう

4

1 に答える 1

1

dbo.iLines.Partはintではありません-照合があります-したがって、NewParetoがそうである場合は、それをintに変換して結合を実行しようとしています。そのフィールドで「BC8018」を検索し、有効であることを確認します。もしそうなら、あなたはに参加する必要がありi.Partますconvert(nvarchar(...), dbo.PeriodInsert.NewPareto)

于 2012-08-23T07:58:35.657 に答える