从SQL CE数据库中删除所有表

3

是否可以执行一个命令从SQL CE数据库中删除所有表?

感谢帮助。

4个回答

5
您可以使用信息模式来生成脚本:
select 'drop table ' || table_name || ';'
  from information_schema.tables;

然后运行该脚本。由于在SQLCE中没有CASCADE选项(据我所知),因此您可能需要运行多次该脚本。


+1 - 我离谱了,因为 CE 和 SQL Server 差别太大了。 - JNK
如果有人仍在寻找2015年的解决方案-更新后的脚本可能是:从information_schema.tables t中选择'drop table ' + t.TABLE_SCHEMA +'.['+ t.table_name + '];'。 - Paweł Staniec
@torm SQL Compact 没有模式! - ErikEJ

1

使用 System.IO.File.Delete 删除文件,然后运行所需的 CREATE TABLE 脚本。


1
能否详细说明一下?那么...删除整个文件吗?我只想在每次运行测试时重建数据库。删除.sdf文件似乎不是一个好主意。 - vbullinger

0

这是我的做法:

在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脚本,以便您不会遇到任何依赖错误。


0

你也可以删除数据库,然后重新创建,但这将擦除所有配置,因此可能不是最佳选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接