3

是否有一种优雅的方法可以擦除数据库中的所有数据(从每个表中删除每一行),而不会破坏架构并且不必删除/读取约束?

我可以从每个表中删除数据,但这似乎很乏味。我已经看到了大量使用存储过程的完整 SQL 实现的解决方案,但显然我无法使用该功能。我可能不会向产品的最终用户提供此功能,但可能会启用它以用于内部测试目的。正如我所说,我可以手动执行此操作,因此请出于好奇

4

5 回答 5

1

不,因为您希望数据库结构保持完整,包括所有关系。因此,首先删除所有主数据,然后删除从数据。

您的脚本应包含按特定顺序截断的查询。

否则,您可以做的是生成一个完整的数据库模式并随时供您使用。每当您需要清空数据库时,删除数据库,重新创建它:)

关于如何为 SQL-CE db..use SQLCE-ToolBox生成模式

还有更多关于 SQLCE db 操作的详细信息,我喜欢这个博客,以及世界各地的大多数 sqlce 用户 :)

于 2013-03-06T10:05:10.130 回答
1

感谢Manish Mishra提供的一些出色的社区帮助,最好的解决方案是删除数据库文件并使用模式重建数据库。我通过 {this blog]( http://erikej.blogspot.co.uk/ )找到了一个名为ExportSqlCe的 SQL Server Management Studio 插件。如果其他人需要此功能,他们将需要Microsoft SQL Sever Management Studio 2008才能连接到 SQL CE 3.5 数据库。

连接到数据库后,您可以按照以下说明使用此插件创建数据库模式

于 2013-03-06T11:21:23.933 回答
0

如果有最终用户,那么您可以交替使用导出选项(在 SQL Server 的 Express 版本中,它会自动避免表中的任何数据)

因此,使用导出选项,您可以轻松创建数据库的副本,包括所有内容但表中没有数据

于 2013-03-06T10:02:08.103 回答
0

我想到了这一点:如果我不理解您的问题,请纠正我:您必须迭代每个表,然后清空表,这样截断表才能完成工作。

您可以从 http://how-to-code-net.blogspot.ro/2012/07/how-to-delete-all-tables-from-database.html获得一些帮助

DECLARE @TableName varchar(500)
DECLARE cur CURSOR
      FOR SELECT [name] FROM sys.tables WHERE type in ('u') 

      OPEN cur

      FETCH NEXT FROM cur INTO @TableName
      WHILE @@fetch_status = 0
      BEGIN
            EXEC('truncate TABLE ' + @TableName)
            --select @TableName
            FETCH NEXT FROM cur INTO @TableName
      END
      CLOSE cur
      DEALLOCATE cur 

这是你需要的吗?

于 2013-03-06T10:04:14.663 回答
0

派对有点晚了,但我在寻找“优雅”的东西时发现了这个,

select 'DELETE FROM ' + name+';' from sys.objects where type = 'U';

会生成一个可以变成字符串的东西。对我来说,我使用 LINQPad,只需复制和粘贴。不错的小技巧!谢谢http://www.sqlservercentral.com/Forums/Topic1396480-392-1.aspx

于 2015-02-02T05:39:33.737 回答