7

と別のテーブル名を使用して一括挿入を行うと、このエラーが発生します。select * from [table_name]

the locale id '0' of the source column 'PAT_NUM_ADT' and the locale id '1033' 
of the destination column 'PAT_ID_OLD' do not match

データベース照合をリセットしようとしましたが、これは役に立ちませんでした。

誰もこのエラーを見たことがありますか?

4

9 に答える 9

8

あるテーブルから別のテーブルにフィールドのフルセット未満をコピーする場合、そのテーブルが世界中の別のドメインにあるか、同じデータベースに同じ場所に配置されているかにかかわらず、それらを順番に選択する必要があります。SqlBulkCopyColumnMappingsは機能しません。はい、やってみました。4つの可能なコンストラクターすべてを使用し、それらをSqlBulkCopyMappingオブジェクトとして使用し、SqlBulkCopy.ColumnMappings.AddのAddメソッドに同じ情報を提供するだけで使用しました。

私の列の名前は同じです。別の名前と別の順序を使用している場合は、実際に列の名前を変更する必要があることに気付くかもしれません。幸運を。

于 2010-01-14T19:45:11.940 に答える
7

一部のデータを一括コピーすると、このエラーメッセージが表示されました。あなたが抱えていたのとまったく同じ問題ではなかったかもしれませんが、私は同じエラーを受け取りました。

具体的には、次のことを行っていました。SELECT NULL ASColumnName..。

そして、宛先はnull許容のvarchar(3)でした。

この場合、私がする必要があるのは、次のようにselectステートメントを更新することだけでした。SELECTCONVERT(VARCHAR(3)、NULL)AS ColumnName .. ..

これは完全に機能し、エラーメッセージは消えました!

于 2012-01-20T21:29:48.063 に答える
6

SqlBulkCopy を使用すると、エラーが発生することがあります。これは、SqlBulkCopy を使用しているときに列をマップする最良の方法です。

私の以前のコード:

SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder("Data Source=ServerName;User Id=userid;Password=****;Initial Catalog=Deepak; Pooling=true; Max pool size=200; Min pool size=0");

        SqlConnection con = new SqlConnection(cb.ConnectionString);

        SqlCommand cmd = new SqlCommand("select Name,Class,Section,RollNo from Student", con);

        con.Open();

        SqlDataReader rdr = cmd.ExecuteReader();

        SqlBulkCopy sbc = new SqlBulkCopy("Data Source=DestinationServer;User Id=destinationserveruserid;Password=******;Initial Catalog=DeepakTransfer; Pooling=true; Max pool size=200; Min pool size=0");

        sbc.DestinationTableName = "StudentTrans";


        sbc.WriteToServer(rdr);


        sbc.Close();
        rdr.Close();
        con.Close();

ソース列「RollNo」のロケールID「0」と宛先列「セクション」のロケールID「1033」が一致しません。

列のマッピング後、コードが正常に実行されます。

私の変更されたコードは次のとおりです。

SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder("Data Source=ServerName;User Id=userid;Password=****;Initial Catalog=Deepak;");

        SqlConnection con = new SqlConnection(cb.ConnectionString);

        SqlCommand cmd = new SqlCommand("select Name,Class,Section,RollNo from Student", con);

        con.Open();

        SqlDataReader rdr = cmd.ExecuteReader();


        SqlBulkCopy sbc = new SqlBulkCopy("Data Source=DestinationServer;User Id=destinationserveruserid;Password=******;Initial Catalog=DeepakTransfer;");

        sbc.DestinationTableName = "StudentTrans";

        sbc.ColumnMappings.Add("Name", "Name");
        sbc.ColumnMappings.Add("Class", "Class");
        sbc.ColumnMappings.Add("Section", "Section");
        sbc.ColumnMappings.Add("RollNo", "RollNo");

        sbc.WriteToServer(rdr);
        sbc.Close();
        rdr.Close();
        con.Close();

このコードは正常に実行されています。

于 2011-11-24T12:52:56.993 に答える
1

サルによる答え

あるテーブルから別のテーブルにフィールドのフルセット未満をコピーする場合、そのテーブルが世界中の別のドメインにあるか、同じデータベースに同じ場所に配置されているかにかかわらず、それらを順番に選択する必要があります。SqlBulkCopyColumnMappingsは機能しません。

私の仕事によると絶対に正しいです!投稿していただきありがとうございます。すべてが同じである必要があります-データ型など。不一致が見つかるたびに、不思議なロケールIDエラーがスローされます-面白いがh###のようにイライラします。

于 2010-01-19T22:58:32.267 に答える
0

データベースの照合を変更すると、テーブルの列は古い照合を保持するため、テーブルを削除して再度作成する必要があります。

于 2011-08-25T10:13:21.787 に答える
0

デフォルトのロケール設定を確認します。また、sp_help を使用して両方のテーブルのロケールをチェックし、それらが同じであることを確認する必要があります。そうでない場合は、正しいロケールに変換する必要があります

于 2008-09-19T15:14:19.757 に答える
0

これをデバッグする優れた方法は、SqlBulkCopy で使用されている SQL クエリを取得し、それを管理スタジオで select-into として実行することselect * from [table_name]ですselect * into newTable from [table_name]。 '。違いがある場合、この誤解を招くエラーが発生する可能性があります。一致するまでクエリまたはターゲット テーブルを調整すると、コマンドが機能します。

于 2018-12-11T08:08:54.763 に答える