【发布时间】:2023-03-10 23:30:02
【问题描述】:
我想从 SQL Server 数据库的所有表中删除所有数据。我设法使用getTables() 方法收集了所有表,但我不知道如何遍历它们或访问它们。我已经写下了我的代码的想法:我认为我可以为每个表执行TRUNCATE TABLE,然后我应该删除所有数据。
private void emptyMssqldb() throws TSTDBException, SQLException {
Connection connMsSql = DBConnection.getConnectionToMsSql();
ResultSet rs = DBConnection.getConnectionToMsSql().getMetaData().getTables(null, null, null, null);
TSTDB.execute_sql(connMsSql, "TRUNCATE TABLE " + tablename );
}
【问题讨论】:
-
docs.microsoft.com/en-us/sql/connect/jdbc/… 可能会帮助您了解如何使用 ResultSet 对象。你研究过这个吗?不过,对于想要删除所有数据的应用来说,这听起来像是一个奇怪的要求。
-
TRUNCATE可能无法正常工作,因为您不能TRUNCATE一个具有任何外键的表(我假设你这样做)。但这感觉像是一个 XY 问题。为什么要删除所有数据? -
那里面为什么会有数据呢?如果您从头开始,从源代码管理创建数据库似乎是一个更好的主意;那它会是空的。当然,正如我所怀疑的那样,由于您现有的
FOREIGN KEY限制,TRUNCATE不会在这里工作,所以您必须DELETE一切;这会很慢,你必须以正确的顺序这样做。你从错误的方向接近这个。 -
然后
DROP一切并从源代码控制重新创建。只要在每个表上“循环”TRUNCATE/DELETE就会(很可能)在您到达被引用为外键的表时失败。或者你必须DROP你所有的外键,TRUNCATE并重新创建它们;不是您真正想要从 Java 中做的事情。 -
这就是为什么“最简单”的答案就是
DROP(确保先备份它!)数据库并重新创建它;您不会遇到任何诚信问题。
标签: java sql sql-server database