2013-02-18 3 views
-1

Я написал эту программу пару месяцев назад, которая ограничивает эти большие файлы .CSV и загружает их в базу данных SQL Server. Так как файл .CSV только в основном, добавленный каждый раз с новыми данными, которые я только что она настроена таким образом, что каждый раз, добавление пользовательских данных он будет удалять все из таблицы и загрузить вновь добавляемые данные следующим образом:Обновление базы данных SQL Server без дубликатов

myConnection.Open(); 
string sql = @"DELETE FROM TestTable;"; 
SqlCommand cmd = new SqlCommand(sql, myConnection); 
cmd.ExecuteNonQuery(); 
myConnection.Close(); 

Теперь я должен настроить его для загрузки данных без удаления предыдущих записей в таблицу, но уловка у меня не может быть дубликатов данных. К счастью, файл .CSV поставляется с уникальным идентификатором для каждой строки, который я использую в качестве первичного ключа, но у меня возникли проблемы с созданием алгоритма для этого. Возможно, что-то похожее на синтаксис DELETE, который я могу использовать с SQL Server для обновления только уникальных данных? Я прошу вас, ребята, так как я не самый большой эксперт, когда дело доходит до SQL Server.

У меня есть пара разных классов и фонового работника, поэтому я не хочу пропустить весь код с самого начала, но если вам нужны какие-либо подробности, дайте мне знать.

EDIT

Существует пример здесь: http://msdn.microsoft.com/en-us/library/y06xa2h1(v=vs.80).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

, что я уверен, что мне нужно сделать, но единственное, что я запутался о том, что DataSet1 и где она приходит от ? Я просто использую строку подключения, чтобы открыть соединение с базой данных SQL Server, а затем используйте SqlDataAdapter для выполнения таких функций, как вставки и прочее.

Если у кого есть какие-либо разъяснения по этому вопросу, это будет очень полезно.

Благодаря

+0

если у вас есть уникальный идентификатор можно вставить, если идентификатор не найден в противном случае игнорировать или обновить существующие данные ... – Zaki

+0

что синтаксис для не найден? – Nick

+0

SQL Server (Microsoft) – Nick

ответ

1

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

CREATE UNIQUE INDEX UIX_YourIndexNameHere 
ON dbo.YourTableNameHere(YourUniqueColumnNameHere) 
WITH (IGNORE_DUP_KEY = ON); 

Это означает:

  • SQL Server не только позволит уникальные значения в этом столбце - не дублирует
  • если какие-либо дубликаты вставляются, они будут выброшены, не поднимая какую-либо ошибку (» проигнорирована», так сказать)

Это также означает:

  • возможных дубликаты будут просто игнорировать - существующая строка для этого уникального идентификатора останется как (нет обновлений)
  • новых строк вставляются

Если вам необходимо обновить уже существующие строки с их идентификационным номером, я бы рекомендовал сделать это:

  • массовая загрузка.CSV во временную промежуточную таблицу
  • используйте команду MERGE (надеясь, что вы используете SQL Server или новее!), Чтобы обновить реальную таблицу из промежуточной таблицы; это позволяет легко вставлять новые строки и обновляя (вместо того, чтобы игнорировать) уже существующие строки
Смежные вопросы