我有一个数据库的测试环境,我想在测试周期开始时用新数据重新加载该数据库。我对重建整个数据库不感兴趣——只是简单地“重新设置”数据。
使用TSQL从所有表中删除所有数据的最佳方法是什么?是否有可以使用的系统存储过程、视图等?我不想为每个表手动创建和维护截断表语句-我更希望它是动态的。
我有一个数据库的测试环境,我想在测试周期开始时用新数据重新加载该数据库。我对重建整个数据库不感兴趣——只是简单地“重新设置”数据。
使用TSQL从所有表中删除所有数据的最佳方法是什么?是否有可以使用的系统存储过程、视图等?我不想为每个表手动创建和维护截断表语句-我更希望它是动态的。
当前回答
不要这样做!真的,这不是个好主意。
如果知道要截断哪些表,可以创建一个存储过程来截断它们。您可以修复顺序以避免外键问题。
如果您真的想要截断它们(例如,您可以BCP加载它们),那么您可以很快地删除数据库并从头创建一个新的数据库,这将带来额外的好处,即您可以确切地知道您所处的位置。
其他回答
最简单的方法就是
打开SQL Management Studio 导航到数据库 右键单击并选择任务->生成脚本(pic 1) 在“选择对象”界面,选择“选择特定对象”选项并勾选“表格”(图2) 在下一个屏幕上,选择“高级”,然后将“Script DROP and CREATE”选项更改为“Script DROP and CREATE”(图3) 选择将脚本保存到新的编辑器窗口或文件中,并根据需要运行。
这将为您提供一个删除和重新创建所有表的脚本,而无需担心调试或是否包含了所有内容。虽然这不仅仅执行截断,但结果是相同的。请记住,自动递增的主键将从0开始,而截断的表将记住最后分配的值。如果在PreProd或Production环境中无法访问Management studio,也可以从代码中执行此操作。
1.
2.
3.
我喜欢在MSSQL Server developer或Enterprise中使用的另一个选项是在创建空模式后立即创建数据库快照。此时,您可以继续将数据库恢复到快照。
虽然有点晚了,但也许能帮到别人。 我有时会创建一个过程,使用T-SQL执行以下操作:
将所有约束存储在临时表中 删除所有约束 除某些不需要截断的表外,截断所有表 重新创建所有约束。
我已经把它列在我的博客上了
不要这样做!真的,这不是个好主意。
如果知道要截断哪些表,可以创建一个存储过程来截断它们。您可以修复顺序以避免外键问题。
如果您真的想要截断它们(例如,您可以BCP加载它们),那么您可以很快地删除数据库并从头创建一个新的数据库,这将带来额外的好处,即您可以确切地知道您所处的位置。
在截断表之前,必须删除所有外键。使用此脚本生成最终脚本,以删除和重新创建数据库中的所有外键。请将@action变量设置为“CREATE”或“DROP”。