идентификатор локали '0' исходного столбца 'PAT_NUM_ADT' и идентификатор локали '1033' столбца назначения 'PAT_ID_OLD' не совпадают - PullRequest
4 голосов
/ 19 сентября 2008

Я получаю эту ошибку, когда выполняю массовую вставку с 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

Я попытался сбросить параметры сортировки БД, но это не помогло.

Кто-нибудь видел эту ошибку?

Ответы [ 8 ]

6 голосов
/ 21 января 2012

У меня только что было это сообщение об ошибке при массовом копировании некоторых данных. Хотя это может быть не та проблема, с которой вы столкнулись, я получаю ту же ошибку.

В частности, я делал следующее: ВЫБЕРИТЕ NULL КАК ColumnName ...

И местом назначения был обнуляемый варчар (3).

В этом случае все, что мне нужно было сделать, это обновить выражение select следующим образом: ВЫБРАТЬ КОНВЕРТ (VARCHAR (3), ПУСТО) ASN ColumnName ...

Это сработало отлично, и сообщение об ошибке исчезло!

6 голосов
/ 14 января 2010

Если вы копируете менее одного набора полей из одной таблицы в другую, независимо от того, находится ли эта таблица в другом домене по всему миру или расположена в одной базе данных, вам просто нужно выбрать их по порядку. SqlBulkCopyColumnMappings не работают. Да, я пытался. Я использовал все четыре возможных конструктора и использовал их как объекты SqlBulkCopyMapping и просто предоставил ту же информацию методу Add в SqlBulkCopy.ColumnMappings.Add.

Мои столбцы названы одинаково. Если вы используете другое имя, а также другой порядок, вы можете обнаружить, что вам действительно нужно переименовать столбцы. Удачи.

5 голосов
/ 24 ноября 2011

Правильно, что когда мы используем 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();

Код выдавал мне ошибку как: Идентификатор локали '0' исходного столбца 'RollNo' и идентификатор локали '1033' столбца назначения 'Section' не совпадают.

Теперь после сопоставления столбцов мой код выполняется успешно.

Мой модифицированный код:

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();

Этот код выполняется успешно.

1 голос
/ 13 июня 2018

Я получил ту же ошибку, и оказалось, что я копирую из столбца VARCHAR в DataTable в INT.

После того, как я изменил тип данных, он работал безупречно. Я успешно скопировал подмножество полей, указав правильные сопоставления полей (сопоставления, работающие как по имени поля, так и по порядковому номеру).

Поэтому убедитесь, что ваши типы данных верны.

1 голос
/ 20 января 2010

ответ по соли

Если вы копируете меньше, чем полный набор полей из одной таблицы в другой, включен ли этот стол другой домен по всему миру, или расположенный в той же базе данных, вы просто нужно выбрать их по порядку. SqlBulkCopyColumnMappings не работают.

согласно моей работе абсолютно верно! Спасибо за публикацию. Все должно быть одинаково - типы данных и т. Д. Каждый раз, когда он обнаруживает несоответствие, он выдает загадочную ошибку идентификатора локали - забавно, но расстраивает как h ###.

0 голосов
/ 11 декабря 2018

Отличный способ отладки - это взять запрос sql, используемый в вашей SqlBulkCopy, и запустить его в Management Studio в качестве выбора, например, изменить select * from [table_name] на select * into newTable from [table_name], затем посмотреть на обнуляемость типы данных 'newTable' против 'table_name'. Если есть какие-либо различия, то вы, вероятно, в конечном итоге с этой ошибочной ошибкой. Отрегулируйте запрос или таблицу назначения, пока они не совпадут, и тогда ваша команда будет работать.

0 голосов
/ 25 августа 2011

Когда вы изменяете параметры сортировки базы данных, столбцы таблиц сохраняют старые параметры сортировки, поэтому вам нужно отбросить таблицы и создать их заново.

0 голосов
/ 19 сентября 2008

Я бы проверил ваши настройки по умолчанию. Кроме того, вам нужно проверить локаль обеих таблиц, используя sp_help, чтобы убедиться, что они одинаковы. Если это не так, вам нужно преобразовать его в правильную локаль

...