【发布时间】:2012-04-26 14:34:18
【问题描述】:
在 SQLite(用于 C#.NET)中是否有一个 SQL 命令可以执行此操作?
DELETE * FROM * WHERE id='idnumber'
【问题讨论】:
-
@juergend 这个问题是关于从所有表中删除一条记录,而不是从所有表中删除所有记录。
-
不是,不是。这一点都不像。在投票否决之前,您应该尝试阅读问题。
在 SQLite(用于 C#.NET)中是否有一个 SQL 命令可以执行此操作?
DELETE * FROM * WHERE id='idnumber'
【问题讨论】:
不,没有。
一种方法是编写一个小脚本到query metadata tables,以创建另一个脚本,其中包含一系列单独的delete 语句,每个表一个。
一个例子可能是(假设每个表都有一个 ID 列):
select 'delete from ' || name || ' where ID = 42'
from sqlite_master
where type = 'table'
这将为每个表生成一个delete 语句,然后您可以捕获该语句并将其作为脚本运行。
但是对于数据库开发人员来说,知道他们的表的名称通常是个好主意:-)
【讨论】:
此删除将从您的数据库中清除所有内容:
.output wipe.sql
.print BEGIN TRANSACTION;
SELECT 'DELETE FROM ' || name || ' WHERE id="idnumber";'
FROM sqlite_master
WHERE type = 'table';
.print COMMIT;
.print VACUUM;
.output
-- .read wipe.sql
请注意,如果您遗漏了 WHERE id="idnumber",这将清除您的数据库!
【讨论】:
我用于动态编程目的的一种方法是创建一个表名数组并循环遍历它们。
例如
斯威夫特
var array = ['table1','table2','table3']
for item in array
{
var stringToDeleteTables:String = "DELETE FROM \\(item) [optional where clause]"
//run the command on the database
}
我希望这对某人有所帮助。非常适合诸如注销或清除搜索数据之类的事情。您甚至可以扩展数组并将其作为函数调用。
【讨论】:
你可以试试看:
//You can do it with the following DANGEROUS commands:
PRAGMA writable_schema = 1;
delete from sqlite_master where type = 'table';
PRAGMA writable_schema = 0;
//you then want to recover the deleted space with
VACUUM
//and a good test to make sure everything is ok
PRAGMA INTEGRITY_CHECK;
希望对你有用。
【讨论】: