是否有一种优雅的方法来擦除数据库中的所有数据(从每个表中删除每一行)而不破坏体系结构并且必须删除/读取约束?
我可以删除每个表中的数据,但这看起来很乏味。我已经看到了很多关于使用存储过程的SQL实现的完整解决方案,但显然我无法使用该功能。我可能不会将此功能提供给产品的最终用户,但可能会启用它以进行内部测试。正如我所说,我可以手动执行此操作,因此将这一点放在好奇心
答案 0 :(得分:1)
没有。因为您希望db结构保持完整,包括所有关系。 因此,首先删除所有主数据,然后删除从数据。
您的脚本应包含特定顺序的截断查询。
否则,您可以执行的操作是生成整个数据库模式并随时使用。无论你需要清空数据库,删除数据库,重新创建它:)
关于如何为SQL-CE db..use SQLCE-ToolBox
生成模式还有关于SQLCE数据库操作的更多详细信息,我喜欢this博客,以及世界各地的大多数sqlce用户:)
答案 1 :(得分:1)
感谢来自Manish Mishra的一些出色的社区帮助,最好的解决方案是删除数据库文件并使用模式重建数据库。我通过{this blog](ExportSqlCe)找到了一个名为http://erikej.blogspot.co.uk/的SQL Server Management Studio插件。如果其他人需要此功能,则需要Microsoft SQL Sever Management Studio 2008才能连接到SQL CE 3.5数据库。
连接到数据库后,您可以使用此插件创建数据库架构instructions
答案 2 :(得分:0)
如果有最终用户,则可以选择使用导出选项(在Express版本中) SQL Server它自动避免表中的任何数据)
因此,使用导出选项,您可以轻松创建包含所有数据库的数据库副本 事情但表中没有数据
答案 3 :(得分: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
这是你需要的吗?
答案 4 :(得分:0)
小晚会,但我在寻找“优雅”的东西时找到了这个,
select 'DELETE FROM ' + name+';' from sys.objects where type = 'U';
会产生一些可以变成字符串的东西。对我来说,我使用LINQPad,只需复制和粘贴。好小技巧!谢谢http://www.sqlservercentral.com/Forums/Topic1396480-392-1.aspx