从 sql ce 数据库中删除所有表

Posted

技术标签:

【中文标题】从 sql ce 数据库中删除所有表【英文标题】:drop all tables from sql ce database 【发布时间】:2010-11-03 13:24:20 【问题描述】:

是否可以执行的命令?

感谢帮助

【问题讨论】:

【参考方案1】:

您可以使用信息SCHEMA来生成脚本:

select 'drop table ' || table_name || ';'
  from information_schema.tables;

然后运行该脚本。您可能需要多次运行该脚本,因为 SQLCE 中没有 CASCADE 选项 (AFAIK)。

【讨论】:

+1 - 因为 CE 与 SQL Server 如此不同,所以我真是太糟糕了 如果有人还在寻找 2015 年 - 更新的脚本可以选择 'drop table ' + t.TABLE_SCHEMA +'.['+ t.table_name + '];'从 information_schema.tables t; @torm SQL Compact 没有架构!【参考方案2】:

System.IO.File.Delete 然后运行所需的 CREATE TABLE 脚本

【讨论】:

想扩展它吗?所以...删除整个文件?我只想在每次运行测试时重建数据库。删除 .sdf 文件似乎是个坏主意。【参考方案3】:

您也可以删除数据库,然后重新创建它,但它会删除您的所有配置,因此可能不是最佳选择。

【讨论】:

【参考方案4】:

这就是我的做法:

    在 Visual Studio 中使用 SQL Server Compact/SQLite Toolbox,右键单击 .sdf 文件并选择 Script Database > Script Database Schema... 另存为CreateTables.sqlce

    在 PowerShell 控制台中粘贴以下内容:

    function GenerateDropScript($DbSchemaFile)
    
        function Reverse($inputArr)
         
            $arr = @($inputArr)
            [array]::Reverse($arr)
            return $arr
        
        $TableNames = Get-Content $DbSchemaFile |
            ?  $_.StartsWith('CREATE TABLE')  |
            %  $_.Substring(14).Replace('] (', '') 
        $ReverseNames = Reverse($TableNames)
    
        "Generating DROP script for all tables in: `n`t$DbSchemaFile`n"
    
        $ReverseNames | %  "DROP TABLE [$_]; GO;" 
    
    

    运行GenerateDropScript CreateTables.sqlce

这将读取 CREATE 脚本并按照创建的相反顺序为所有表生成 DROP 脚本,因此您不会遇到任何依赖错误。

【讨论】:

以上是关于从 sql ce 数据库中删除所有表的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL Server CE 表中删除一行?

如何检查 SQL Server CE 数据库的索引?

无法从 SQL Server CE 中删除记录

在 Sql Server CE 中缩小或压缩?

如何使用一个 SQL 查询从数据库中删除所有表?

访问 SQL CE 数据库的线程安全方式