无法使用 SqlPackage 将 Azure bacpac 还原到 localdb

JuC*_*hom 4 sql-server azure-sql-database

我已在 bacpac 文件中对 SQL Azure 进行了备份,当我尝试将 bacpac 导入 localdb 时,它总是失败。

这是我使用的命令:

PS C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin> .\SqlPackage.exe /Action:Import 
/SourceFile:"C:\Users\S\Desktop\MyDb.bacpac" 
/TargetConnectionString:"Data Source=(localdb)\v11.0;Initial Catalog=MyDb; Integrated Security=true;"
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

*** Error importing database:Data cannot be imported into target because it 
contains one or more user objects. Import should be performed against a new, empty 
database.
Error SQL0: Data cannot be imported into target because it contains one or more
user objects. Import should be performed against a new, empty database.
Run Code Online (Sandbox Code Playgroud)

我的机器是新装的,根本没用过localdb。

小智 5

我遇到了这个问题,经过一番折腾,终于解决了。

发生的情况是,您很可能是错误地在模型数据库中创建了一个用户对象。在 Management Studio 上查看 Databases\System Databases\model 下。这是创建新数据库时使用的模板,并在导入 bacpac 时使用。如果模型中有对象(例如表),它们会与新数据库同时自动创建。然后 bacpac 导入会在它期望的空白数据库中遇到它们,因此立即失败。

如果您手动创建新数据库,您还会看到创建的这些相同的对象。

从模型数据库中删除对象可以解决该问题。