Могу ли я игнорировать повторяющиеся записи данных, уже присутствующих в базе данных SQL, из данных, которые я передаю в SqlBulkCopy. Если да, то как и объясните, если нет и другой вариант.SqlBulkCopy Игнорировать повторяющиеся записи данных из базы данных
ответ
Нет, это не встроенный. Сначала необходимо очистить данные на клиенте или вставить в промежуточную таблицу.
Как сказал предыдущий плакат, это не встроенный добиться подобного результата с помощью следующего:.
SQL хранимую процедуру, которая принимает TableValuedParameter с данными, вам требуется.
В сохраненной процедуре я затем вставляю все записи в временную таблицу. После этого вы можете использовать инструкцию SQL MERGE в сохраненном proc для вставки данных там, где они еще не существуют.
Итак, предположим, что наши данные - это просто имена людей, хранящиеся в таблице людей. Мы имеем только идентификатор и имя. Я также предполагаю, что эта таблица называется «люди».
Вот как я создаю мою таблицы оцененной тип параметра (созданную в SQL Server)
CREATE TYPE udt_person AS TABLE(
[id] [INT] NOT NULL,
[name] [nvarchar(50)] NULL
)
GO
теперь я создать хранимую процедуру:
CREATE PROCEDURE SaveNewPeople @pPeople udt_Person
AS
BEGIN
-- Create Temp table
CREATE TABLE #tmpPeople (id INT, name VARCHAR 50)
-- We will stage all data passed in into temp table
INSERT INTO #tmpPeople
SELECT id, name FROM @pPeople
-- NB: you will need to think about locking strategy a bit here
MERGE people AS p
USING #tmpPeople AS t
ON p.id = t.id
WHEN NOT MATCHED BY TARGET THEN
-- We want to insert new person
INSERT (id, name) VALUES (t.id, t.name)
WHEN MATCHED THEN
-- you may not need this, assume updating name for example
UPDATE SET p.name = t.name
END
Теперь мы имеем SQL на месте.
Давайте создам большую часть данных в C#:
DataTable ppl = new DataTable();
ppl.Columns.Add("id", typeof(int));
ppl.Columns.Add("name", typeof(string));
// table is created, let's add some people
var bob = ppl.NewRow();
bob["id"] = 1;
bob["name"] = "Bob";
ppl.Rows.Add(bob);
var jim = ppl.NewRow();
jim["id"] = 2;
jim["name"] = "Jim";
ppl.Rows.Add(jim);
// that's enough people for now, let's call the stored procedure
using(var conn = new SqlConnection("YouConnStringHere"))
{
using(var cmd = new SqlCommand("SaveNewPeople", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
var tvp = new SqlParameter
{
ParameterName = "@pPeople",
SqlDbType = SqlDbType.Structured,
Value = ppl,
TypeName = "udt_person"
}
cmd.Parameters.Add(tvp);
conn.Open();
cmd.ExecuteNonQuery();
}
}
Надеется, что это дает вам идею. Если вы затем изменили C# datatable, вы должны увидеть строки, вставленные, обновленные или проигнорированные.
Удачи.
Да, спасибо GinjaNinja. Я получил то, что вы сказали. Можете ли вы дать мне пример кода для функции Table Valued Function и SQL Merge. Я использую Sql Server 2000 и .net 2.0 – Rahul
Я изменил свой пост выше, а затем заметил, что вы на SQL 2000. Это не сработает, извините! – GinjaNinja
- 1. Как удалить повторяющиеся записи из базы данных?
- 2. Возврат только повторяющиеся записи из базы данных
- 3. SqlBulkCopy из базы данных MySQL в базу данных SQL Server
- 4. Игнорировать избыточные значения извлекаются из базы данных
- 5. Использование SQLBulkCopy для вставки/обновления базы данных
- 6. Ответ AJAX из базы данных создает повторяющиеся записи
- 7. Как удалить повторяющиеся записи из всей базы данных
- 8. Удалите повторяющиеся записи из базы данных с условиями
- 9. СЛУЧАЯ будет игнорировать повторяющиеся записи
- 10. Как удалить повторяющиеся записи из таблицы данных?
- 11. Независимый от базы данных аналог SqlBulkCopy
- 12. Удалить повторяющиеся данные из базы данных mysql
- 13. Повторяющиеся данные из базы данных в Meteor
- 14. Получить повторяющиеся данные из базы данных
- 15. записи базы данных записи из многомерного массива
- 16. Игнорировать поле из базы данных Spring Roo
- 17. SQLBulkcopy - заголовок данных, вставленных в таблицу базы данных
- 18. Проблемы с производительностью базы данных - повторяющиеся данные
- 19. Codeigniter игнорировать пустые элементы массива на записи базы данных обновления
- 20. Ранжирование базы данных Записи
- 21. Как очистить записи базы данных базы данных или записи?
- 22. Объединить повторяющиеся временные записи в базе данных
- 23. SqlBulkCopy на одной записи?
- 24. Записи базы данных Сортировка
- 25. Обновление записи базы данных
- 26. Записи базы данных Заказать
- 27. Как перечислить повторяющиеся записи в базе данных
- 28. Как я могу удалить повторяющиеся строки из базы данных?
- 29. как предотвратить повторяющиеся записи в базе данных
- 30. Удалить скопированные записи из базы данных
Что относительно первичного ключа в вашей записи? у записи нет первичного ключа? –
Одним из возможных решений является создание столбцов (таблиц) таблицы уникальным. И для этого нам нужно создать индекс в таблице с именами столбцов, которые мы хотим проверить на уникальность. –