3

次のコードを実行しています。

    Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
    objBL.ConnectionString = "provider=SQLOLEDB.1;data 

    source=mySQLServer;database=myDB;uid=SA;pwd=myPword"
    objBL.ErrorLogFile = "c:\error.log"
    objBL.Execute "c:\xml\schema.xml", "c:\xml\addresses.xml"
    Set objBL = Nothing

かなり大きな XML ファイルを SQL テーブルにロードしようとしていますが、「列 'LocID'、テーブル 'myDB.dbo.myTable' に値 NULL を挿入できません。列は null を許可していません。 INSERT は失敗します。」

「LocID」は私の主キーであり、ID フィールドです。NULLデータを移動するのではなくロードするだけで、XML ファイルに ID フィールドがないため、この列に挿入されないようにする方法はありますか?

4

2 に答える 2

2

これを objBL.Execute の前に追加します

objBL.KeepIdentity = False

MSDN の記事からSQL Server XML Bulk Load Object Model (SQLXML 4.0) (強調は私のもの)

キープアイデンティティ

ソース ファイルの ID 型列の値を処理する方法を指定します。これはブール型のプロパティです。プロパティが TRUE に設定されている場合、XML 一括読み込みは、ソース ファイルで指定されている値を ID 列に割り当てます。 プロパティが FALSE に設定されている場合、一括読み込み操作では、ソースで指定されている ID 列の値が無視されます。この場合、SQL Server は ID 列に値を割り当てます。

バルク ロードに、SQL Server によって生成された値が格納されている ID 列を参照する外部キーである列が含まれる場合、バルク ロードはこれらの ID 値を外部キー列に適切に伝達します。

このプロパティの値は、一括読み込みに関係するすべての列に適用されます。デフォルト値は TRUE です。

于 2011-04-22T15:15:22.173 に答える
1

データベースに BulkInsert を実行する場合は、各列を NULL にすることができる一時テーブルに一括挿入を実行する必要があり、通常はサイズを VARCHAR(800) に設定します。

これらのテーブルに入ったら、ETL を実行してマスター テーブルに読み込みます。

これがお役に立てば幸いです。

于 2011-04-21T22:59:12.483 に答える