2011-01-25 15 views
0

私は私の目的のために変更this質問から次のSQL文を使用して、リンクされたSQL Serverのテーブルに1つのAccessテーブルからデータを挿入しようとしてきた - しかし、私は '取得しておきますオーバーフロー 'というエラーメッセージが表示されます。INSERT - オーバーフローエラー

INSERT INTO dbo_tblGageActivity(strGageID, strCustJobNum, datDateEntered, datTimeEntered) 
SELECT [Gage ID] as GageID, [Customer Job#] as JobNum, [Date] as DateEntered, 
[Time Entered] as TimeEntered FROM TblInstTrak; 

私はこれをさまざまな方法で試してみましたが、すべてオーバーフローエラーになりました。私は何かが欠けているに違いないが、私の人生のために、私は何が分からない。 1つのInsertサブクエリで処理するのに100,000を超えるレコードが多すぎますか?

- 編集2011年1月25日には1540時間@ -

次のようにフィールドのデータ型とサイズは次のとおりです。

TblInstTrak   Type:Size  Required  dbo_tblGageActivity   Type:Size  Required 
---------------------------------------------------------------------------------------------------- 
Gage ID    Text:50  True   strGageID     Text:50  True 
Customer Job#  Text:50  False  strCustJobNum    Text:50  True 
Date     Date/Time:8 False  datDateEntered    Date/Time:8 True 
Time Entered   Date/Time:8 False  datTimeEntered    Date/Time:8 True 

- 編集2011年1月26日1355 @時間 -

申し訳ありません - 私は数日間(私はそれと一緒に来て、それがここに来た日)前に私の頭を叩いていたと私が思い付くことができる唯一の違いは、ローカルアプリ側の入力日時フィールドは 'm/d/yyyy'に設定され、ローカルアプリ側の入力時間フィールド'Long Time'にフォーマットされています - SQL Serverテーブルのこれらのフィールドにはフォーマットが設定されていません。

パフォーマンス上の理由から、現在のすべてのデータをテーブルに取得するためのより良い方法があるかどうか疑問に思っています。その後、ローカルアプリケーションからミラーSQL Serverコピーに更新をプルします。 SQL Server側のコピーにはデータは入力されません。これはテストアプリケーションのパフォーマンスにのみ使用されます。変更される唯一のデータはローカルアプリケーション側です。このアプローチは、SQL Serverのデータベーステーブルをワイプして更新するたびに再投入するほうが簡単でしょうか?

から1236時間@編集2011年1月28日 -

(この上に私を指してくれてありがとうデビッド・フェントン)ローマ帝国時代の周りからいくつかの日付を見つけた後、私は次のように私のインポートSQL文を修正:

INSERT INTO dbo_tblGageActivity(strGageID, strCustJobNum, datDateEntered, datTimeEntered) 
SELECT [Gage ID] as GageID, [Customer Job#] as JobNum, [Date] as DateEntered, 
[Time Entered] as TimeEntered FROM TblInstTrak WHERE [Date] >=1/1/1900; 

私はカップル本当に素晴らしい答えを得た、と私はとても腹を立て取得しないでください1つの答え(精神的苦痛)を選ぶことができます - これは本当に本当に私が学ぶ助けました。

+0

行を挿入することはできますか? – Matthew

+2

ソース列と宛先列のデータ型は何ですか?その後、オーバーフローエラーがスローされます - - –

+0

いや、それは約2分間動作し、何も先テーブル(dbo_tblGageActivity) –

答えて

1

あなたはSQL Serverの日付/時刻フィールドの範囲外にあるAccessで日付値を持っていますか?これは、古いAccessデータベースをSQL Serverにアップサイジングする際に遭遇する非常に一般的な問題です。実際にはローマ帝国後期に行われた日付の指紋エラーが多数発生しています。

+0

は、私は、ソースデータを通り抜けた - と「グラグラ日付」を持っている4つの項目、1/4/111、5/4/111、12/1/804、6/1/822があります。いくつかは20世紀初頭の日付でしたが、ローカルデータベースで有効なのでそのままインポートするべきではありませんか? –

+1

@Comrad_Durandal:smalldatetime' 'のために下界日付が、それは1753年1月1日だdatetime''のために、1900年1月1日です。あなたが見ることができるように、あなたの「幸運な日々」は、2人ともどちらにも当てはまらない。だから彼らはあなたの問題の原因である可能性が高いです。 –

+0

@ Andriy M - これらのような行をインポートするのを防ぐにはどうすればいいのですが、通常の行をインポートすることはできますか? –

3

を選択した行の値の1つ以上はありませんので、オーバーフローが発生します挿入しようとしているテーブルに収まりません。つまり、TblInstTrakには、それぞれの列に収まらない値がdbo_tblGageActivityにあります。 2つの表の定義を比較し、宛先表の列がソース表のデータを収めるのに十分な幅であることを確認してください。

+0

問題は私がしたことです - 両方の列が同じです。 SQL Serverテーブルには元のテーブルにはない一意のID列があります。 SELECTサブクエリを制限すると、それはうまくいきません。 –