【问题标题】:Delete From All Tables in SQLite从 SQLite 中的所有表中删除
【发布时间】:2012-04-26 14:34:18
【问题描述】:

在 SQLite(用于 C#.NET)中是否有一个 SQL 命令可以执行此操作?

DELETE * FROM * WHERE id='idnumber'

【问题讨论】:

  • @juergend 这个问题是关于从所有表中删除一条记录,而不是从所有表中删除所有记录。
  • 不是,不是。这一点都不像。在投票否决之前,您应该尝试阅读问题。

标签: c# sql sqlite


【解决方案1】:

不,没有。

一种方法是编写一个小脚本到query metadata tables,以创建另一个脚本,其中包含一系列单独的delete 语句,每个表一个。

一个例子可能是(假设每个表都有一个 ID 列):

select 'delete from ' || name || ' where ID = 42'
from sqlite_master
where type = 'table'

这将为每个表生成一个delete 语句,然后您可以捕获该语句并将其作为脚本运行。

但是对于数据库开发人员来说,知道他们的表的名称通常是个好主意:-)

【讨论】:

  • 我知道名字,但我有很多表 =P 无论如何,这个“小脚本”是如何完成的?
  • @CJxD,我添加了一点 sn-p 应该是一个很好的起点。它未经测试,但你应该明白。
  • 看起来很狡猾,我喜欢它!
【解决方案2】:

此删除将从您的数据库中清除所有内容:

.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",这将清除您的数据库!

【讨论】:

    【解决方案3】:

    我用于动态编程目的的一种方法是创建一个表名数组并循环遍历它们。

    例如

    斯威夫特

    var array = ['table1','table2','table3']
    
    for item in array
    
    {
        
    var stringToDeleteTables:String = "DELETE FROM \\(item) [optional where clause]"
    
    //run the command on the database
    
    }
    

    我希望这对某人有所帮助。非常适合诸如注销或清除搜索数据之类的事情。您甚至可以扩展数组并将其作为函数调用。

    【讨论】:

      【解决方案4】:

      你可以试试看:

      //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;
      

      希望对你有用。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2012-03-24
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多