質問

「SQL Serverオブジェクトをコピー」でエラーを発生させているDTSパッケージがあります。仕事。タスクは、1つのSQL Server 2000 SP4サーバーから別の(同じバージョンの)サーバーにテーブルとデータをコピーしており、エラーが発生しています:-

'dbo.MyTableName'のCHECK制約が見つかりませんでしたが、テーブルに制約があることが示されています。

ソーステーブルには、問題の原因と思われる1つのチェック制約が定義されています。 DTSパッケージを実行した後、物は適切に動作するように見えます-テーブル、すべての制約、およびデータは宛先サーバーで作成されますか?ただし、上記のエラーが発生すると、後続のステップは実行されません。

このエラーが発生する理由は何ですか?

役に立ちましたか?

解決

これは、sysテーブルのメタデータが実際のスキーマと同期しなくなったことを示します。より一般的な破損の兆候が他にない場合は、テーブルを別のテーブルにコピーして(*をoldtableからnewtableに選択して)テーブルを再構築し、古いテーブルを削除してから新しいテーブルの名前を変更して制約を置き換えます助けて。これは、テーブルの最後にない列を挿入するときに2000のEnterprise Managerが処理する方法に似ているため、テーブルの中央に新しい列を挿入してから削除すると、同じことが実現しますクエリを手動で記述したくない。

この種のエラーが他にも発生した場合、データベース全体の状態に多少懸念があります。 (ここでは、すでにCHECKDBコマンドを実行しており、エラーが持続していると仮定しています...)

他のヒント

このエラーは、新しい列(チェック制約付き)が既存のテーブルに追加されたときに開始されました。調査するには:-

  • テーブルを別の宛先SQL Serverにコピーし、同じエラーが発生しました。
  • まったく同じ構造で名前が異なる新しいテーブルを作成し、エラーなしでコピーしました。
  • 問題のテーブルのチェック制約を削除して再作成しましたが、同じエラーが発生します。
  • ALL_ERRORMSGSを指定したdbcc checktable( 'MyTableName')はエラーを返しません。
  • ソースおよび宛先データベースのdbcc checkdbでエラーは発生しません。

興味深いことに、DTSパッケージは次のように見えます:-

  • 表をコピーします。
  • データをコピーします。
  • 制約を作成する

チェック制約の作成時間はテーブルの作成時間の7分後です。つまり、データを移動した後にチェック制約を作成します。コピー中にデータをチェックする必要がなく、おそらくパフォーマンスが向上するため、理にかなっています。

Godekeが示唆しているように、同じ列を持つ新しいテーブルが機能するため、システムテーブルで何かが壊れていると思います。 DBCCステートメントにエラーはありませんが

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top