sql-server - WiX:DB Restore 不恢复表和记录

标签 sql-server wix windows-installer

我正在尝试使用 WiX 恢复备份数据库文件,并且创建了数据库,但没有恢复任何表和数据。看起来好像它只是创建数据库而没有执行其他操作。不确定这是否与 WiX 相关或与 MSSQL 使用有关。这是 WiX XML:

      <Component Id="sql_backup_restore" Guid="8C95F258-7AB7-4A3A-A0CD-438FC61D45CC">
        <CreateFolder Directory="javaaaanew_dir"/>
        <sql:SqlDatabase Id="aaanew3_db" Server="[MSSQLSERVER]" Database="master" ConfirmOverwrite="yes" ContinueOnError="yes" DropOnReinstall="no" DropOnInstall="no" DropOnUninstall="no" CreateOnInstall="yes" CreateOnReinstall="no" CreateOnUninstall="no">
          <!-- restore blankaaa database -->
          <sql:SqlString Id="attach_db" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="1" SQL="RESTORE DATABASE blankaaa FROM DISK = '[blankaaaBAK]' WITH RECOVERY;" />
          <!-- rename blankaaa to aaanew3 -->
          <sql:SqlString Id="alter_db_name" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="2" SQL="USE master;GO;ALTER DATABASE blankaaa Modify Name = 'aaanew3' GO;" /> <!-- should fail here if preexisting database? -->
          <!-- change aaanew3 dbowner to 'sa' -->
          <sql:SqlString Id="alter_db_owner" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="3" SQL="ALTER AUTHORIZATION ON DATABASE::aaanew3 TO sa;" />
          <!-- add user 'sa' to database security? -->
          <sql:SqlString Id="alter_db_sa" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="4" SQL="USE [aaanew3];GO;CREATE USER [sa] FOR LOGIN [sa];GO;" />
          <!-- add user mapping for 'sa' on aaanew3 with schema 'dbo' -->
          <sql:SqlString Id="alter_db_schema" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="5" SQL="USE [aaanew3];GO;ALTER USER [sa] WITH DEFAULT_SCHEMA=[dbo];GO;" />
        </sql:SqlDatabase>
      </Component>

我还尝试过“WITH RECOVERY”并在方括号周围使用转义序列:

<sql:SqlString Id="attach_db" ExecuteOnInstall ="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="yes" Sequence="1" SQL="RESTORE DATABASE blankaaa FROM DISK = '[\[]blankaaaBAK[\]]' WITH RECOVERY;" />

文档中执行此操作的正确方法似乎非常不清楚。

最佳答案

我没有尝试引用数据库文件的 wix 名称,而是使用了以下内容:

 SQL="RESTORE DATABASE blankaaa FROM DISK = '[INSTALLFOLDER]javaaaanew\blankaaa.bak' WITH RECOVERY"

关于sql-server - WiX:DB Restore 不恢复表和记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45928260/

相关文章:

sql-server - 导致循环的 FK SET NULL 设计的替代方案

logging - 如何记录从 WiX 包制作的安装

checkbox - WiX 刻录主题复选框 - 默认选中

c++ - WIX 将参数传递给 C++ 自定义操作

windows - 如何压缩合并模块?

visual-studio - (Wix) heat.exe 无法用 msbuild 加载

sql-server - 将 .bacpac 文件从 v12 Azure SQL 数据库删除/重新导入到同一服务器时,不会导入表

sql-server - SQLCMD 变量和 SSDT 架构比较问题

sql-server - 更改列以不允许为空

wix - 从 TempFolder 运行 WiX EXE CustomAction