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

是否可以执行从 sql ce 数据库中删除所有表的命令?

感谢帮助

【问题讨论】:

    标签: sql sql-server-2008 sql-server-ce


    【解决方案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】:

      这就是我的做法:

      1. 在 Visual Studio 中使用 SQL Server Compact/SQLite Toolbox,右键单击 .sdf 文件并选择 Script Database > Script Database Schema...
      2. 另存为CreateTables.sqlce
      3. 在 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;" }
        }
        
      4. 运行GenerateDropScript CreateTables.sqlce

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多