安装程序更新中的数据库更改管理
Database changes management in installer updates
如何根据某些条件运行一系列数据库脚本?
基本上我想检查安装在用户机器上的版本,然后想运行所有脚本直到安装程序中的版本。
假设用户安装了版本号 4.10,如果他要安装版本号 4.15,那么我想 运行 SQL 版本号 4.111 到 4.15 的脚本。
我正在尝试这个,但它说条件元素不能嵌套在 SQL 脚本元素中。
<sql:SqlScript Id="ScriptV11" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV11" ContinueOnError="no" Sequence="11">
<Condition>INSTALLED_BUILD < 4.11 </Condition>
</sql:SqlScript>
非常感谢任何帮助。
注意:INSTALLED_BUILD 属性 是使用注册表搜索设置的。
条件可以应用于组件,但使用多个组件的问题是您不能依赖于以任何特定顺序安装的组件。但是,您可以控制脚本的顺序。请参阅此相关问题:Can I ensure components installation order?.
考虑到这一点,并且您真的想在安装程序中进行升级,您可以尝试类似的操作:
<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>
作为一种解决方案,如果您的发行版相对较少且相距甚远,这就差不多了。如果您有频繁的发布计划,此解决方案将很快变得无法维护。
@Stein 关于 运行 开始时的升级脚本的评论将为您提供更多控制权,并且从长远来看更易于维护。
如何根据某些条件运行一系列数据库脚本?
基本上我想检查安装在用户机器上的版本,然后想运行所有脚本直到安装程序中的版本。
假设用户安装了版本号 4.10,如果他要安装版本号 4.15,那么我想 运行 SQL 版本号 4.111 到 4.15 的脚本。
我正在尝试这个,但它说条件元素不能嵌套在 SQL 脚本元素中。
<sql:SqlScript Id="ScriptV11" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="FileV11" ContinueOnError="no" Sequence="11">
<Condition>INSTALLED_BUILD < 4.11 </Condition>
</sql:SqlScript>
非常感谢任何帮助。
注意:INSTALLED_BUILD 属性 是使用注册表搜索设置的。
条件可以应用于组件,但使用多个组件的问题是您不能依赖于以任何特定顺序安装的组件。但是,您可以控制脚本的顺序。请参阅此相关问题:Can I ensure components installation order?.
考虑到这一点,并且您真的想在安装程序中进行升级,您可以尝试类似的操作:
<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>
作为一种解决方案,如果您的发行版相对较少且相距甚远,这就差不多了。如果您有频繁的发布计划,此解决方案将很快变得无法维护。
@Stein 关于 运行 开始时的升级脚本的评论将为您提供更多控制权,并且从长远来看更易于维护。