Sql 安装程序更新中的数据库更改管理
如何根据某些条件运行一系列数据库脚本 基本上,我想检查安装在用户机器上的构建,然后运行所有脚本,直到安装程序中的构建 假设用户安装了版本号4.10,如果他要安装版本4.15,那么我想运行版本4.111到4.15的SQL脚本 我正在尝试,但它说条件元素不能嵌套在SQL脚本元素中Sql 安装程序更新中的数据库更改管理,sql,wix,windows-installer,wix3.8,Sql,Wix,Windows Installer,Wix3.8,如何根据某些条件运行一系列数据库脚本 基本上,我想检查安装在用户机器上的构建,然后运行所有脚本,直到安装程序中的构建 假设用户安装了版本号4.10,如果他要安装版本4.15,那么我想运行版本4.111到4.15的SQL脚本 我正在尝试,但它说条件元素不能嵌套在SQL脚本元素中 <sql:SqlScript Id="ScriptV11" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV11" ContinueOn
<sql:SqlScript Id="ScriptV11" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV11" ContinueOnError="no" Sequence="11">
<Condition>INSTALLED_BUILD < 4.11 </Condition>
</sql:SqlScript>
已安装\u内部版本<4.11
任何帮助都将不胜感激
注意:INSTALLED_BUILD属性是使用注册表搜索设置的。条件可以应用于组件,但使用多个组件的问题是,您不能依赖以任何特定顺序安装的组件。但是,您可以控制脚本的顺序。请参阅此相关问题: 考虑到这一点,并且您确实希望在安装程序中进行升级,您可以尝试以下方法:
<Component Id="UpgradeFromV410" Guid="--Your GUID--">
<Condition>INSTALLED AND (INSTALLED_BUILD=4.10)</Condition>
<sql:SqlScript Id="ScriptV10V11" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV11" ContinueOnError="no" Sequence="11"/>
<sql:SqlScript Id="ScriptV10V12" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV12" ContinueOnError="no" Sequence="12"/>
<sql:SqlScript Id="ScriptV10V13" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV13" ContinueOnError="no" Sequence="13"/>
<sql:SqlScript Id="ScriptV10V14" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV14" ContinueOnError="no" Sequence="14"/>
<sql:SqlScript Id="ScriptV10V15" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV15" ContinueOnError="no" Sequence="15"/>
</Component>
<Component Id="UpgradeFromV411" Guid="--Your GUID--">
<Condition>INSTALLED AND (INSTALLED_BUILD=4.11)</Condition>
<sql:SqlScript Id="ScriptV11V12" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV12" ContinueOnError="no" Sequence="12"/>
<sql:SqlScript Id="ScriptV11V13" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV13" ContinueOnError="no" Sequence="13"/>
<sql:SqlScript Id="ScriptV11V14" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV14" ContinueOnError="no" Sequence="14"/>
<sql:SqlScript Id="ScriptV11V15" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV15" ContinueOnError="no" Sequence="15"/>
</Component>
<Component Id="UpgradeFromV412" Guid="--Your GUID--">
<Condition>INSTALLED AND (INSTALLED_BUILD=4.12)</Condition>
<sql:SqlScript Id="ScriptV12V13" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV13" ContinueOnError="no" Sequence="13"/>
<sql:SqlScript Id="ScriptV12V14" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV14" ContinueOnError="no" Sequence="14"/>
<sql:SqlScript Id="ScriptV12V15" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV15" ContinueOnError="no" Sequence="15"/>
</Component>
<Component Id="UpgradeFromV413" Guid="--Your GUID--">
<Condition>INSTALLED AND (INSTALLED_BUILD=4.13)</Condition>
<sql:SqlScript Id="ScriptV13V14" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV14" ContinueOnError="no" Sequence="14"/>
<sql:SqlScript Id="ScriptV13V15" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV15" ContinueOnError="no" Sequence="15"/>
</Component>
<Component Id="UpgradeFromV414" Guid="--Your GUID--">
<Condition>INSTALLED AND (INSTALLED_BUILD=4.14)</Condition>
<sql:SqlScript Id="ScriptV13V15" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV15" ContinueOnError="no" Sequence="15"/>
</Component>
已安装和(已安装的版本=4.10)
已安装和(已安装的版本=4.11)
已安装和(已安装的版本=4.12)
已安装和(已安装的版本=4.13)
已安装和(已安装的版本=4.14)
作为一个解决方案,如果您的发行版本相对较少且相差很远,那么这几乎是可以的。如果您有一个频繁的发布计划,这个解决方案将很快变得不可维护
@Stein关于在开始时运行升级脚本的评论将为您提供更多的控制,并且更易于长期维护。可能是我应该将每个构建脚本作为单独的组件来运行吗?从应用程序启动例程中运行这样的脚本,而不是在安装程序本身中运行。