Как создать и использовать хранимую процедуру для SQL-Sever, которая удалит данные во всех таблицах в базе данных с помощью VS 2010?

Я использовал структуру сущностей с ASP.NET MVC, и я ищу простой и быстрый способ удалить всю информацию в базе данных. Требуется довольно много времени, чтобы удалить всю информацию из объекта объектов, а затем сохранить изменения в базе данных (возможно, потому, что существует много отношений «многие ко многим»), и я думаю, что должно быть очень быстро просто удалить все информации с хранимой процедурой, но я не уверен, как это сделать. Как создать и использовать хранимую процедуру для SQL-Sever, которая удалит данные во всех таблицах в базе данных с помощью VS 2010? Также, если я это сделаю, команда будет совместима с другой версией SQL-Server? (Я использую 2008 на моем тестирующем comptuer, но когда я загружаю его, я не уверен, что моя хостинговая компания использует 2008 или 2005).

Благодаря!!

Это решение будет хорошо работать с точки зрения удаления всех ваших данных в таблицах базы данных.

Вы можете создать это хранимое proc прямо в Visual Studio на сервере разработки SQL Server 2008. Он будет хорошо работать в любой версии SQL Server (2000+).

CREATE PROC NukeMyDatabase AS --order is important here. delete data in FK'd tables first. DELETE Foo DELETE Bar TRUNCATE TABLE Baz 

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

Затем вы можете вызвать эту сохраненную процедуру, используя Entity Framework, после добавления ее в ваш .edmx:

  myContext.NukeMyDatabase(); 

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

Критическая проблема, как указал p.campbell, определяет правильный порядок операторов DELETE .

Ограничения внешнего ключа между таблицами по существу представляют собой иерархию. Если таблица 3 зависит от таблицы 2, а таблица 2 зависит от таблицы 1, то таблица 1 является корнем, а таблица 3 является листом.

Другими словами, если вы собираетесь удалить из этих трех таблиц, вы должны начать с таблицы, которая не имеет зависимостей и будет работать вверх. Это цель этого кода:

 DECLARE @sql VARCHAR(MAX) SET @sql = '' ;WITH c AS ( SELECT parent_object_id AS org_child, parent_object_id, referenced_object_id, 1 AS Depth FROM sys.foreign_keys UNION ALL SELECT c.org_child, k.parent_object_id, k.referenced_object_id, Depth + 1 FROM c INNER JOIN sys.foreign_keys k ON c.referenced_object_id = k.parent_object_id WHERE c.parent_object_id != k.referenced_object_id ), c2 AS ( SELECT OBJECT_NAME(org_child) AS ObjectName, MAX(Depth) AS Depth FROM c GROUP BY org_child UNION ALL SELECT OBJECT_NAME(object_id), 0 AS Depth FROM sys.objects o LEFT OUTER JOIN c ON o.object_id = c.org_child WHERE c.org_child IS NULL AND o.type = 'U' ) SELECT @sql = @sql + 'DELETE FROM ' + CAST(ObjectName AS VARCHAR(100)) + ';' + CHAR(13) + CHAR(10) /** for readability in PRINT statement */ FROM c2 ORDER BY Depth DESC PRINT @sql /** EXEC (@sql) **/ 
 exec sp_MSForEachTable 'truncate table ?'; 

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

  • Почему этот запрос EF занимает слишком много времени?
  • Ошибка хранимой процедуры Entity Framework с помощью DateTime
  • Каскадное удаление объектов Entity Framework
  • Проверьте целостность данных или дайте дескриптор базы данных
  • Как увеличить сеанс тайм-аута между инфраструктурой Entity и сервером Sql
  • Каков первоначальный каталог в локальной базе данных SQL Server?
  • Конфигурация поставщика инфраструктуры Entity Framework
  • Как объявить массив целых чисел в хранимой процедуре SQL Server?
  • Объектная структура CREATEs для столбцов базы данных SQL Server не поддающихся вычислению
  • EF блокирует доступ к таблице базы данных
  • В Entity Framework - первый подход к коду должен выполнять операции удаления между ссылочными таблицами
  • Давайте будем гением компьютера.