我正在尝试使用SQLCMD安装SQL脚本(SSDT) - 因为此脚本包含许多SSDT定义,并且无法由WIX SQL扩展运行。 我希望我的SQL脚本文件是二进制文件(因为我不希望它留在目标机器上)
如何设置SQLCMD命令以使用二进制脚本(使用-i)?
P.S。
我试过这个博客: http://neilsleightholm.blogspot.co.il/2008/08/executing-sqlcmd-from-wix.html##
但此代码未显示二进制SQL文件和SCLCMD命令之间的链接。 有人可以用正确的代码帮助我吗?
这是我使用的代码,这对我不起作用
<Binary Id="CreateSchema.sql" SourceFile="..\SQL\CreateSchema.sql" />
<CustomAction Id="sqlcmd.cmd"
Property="sqlcmd"
Value=""sqlcmd.exe" -S [DATABASE_SERVER]
-i "[#CreateSchema.sql]" -v var=SYSTEM_USER -o [INSTALLDIR]installSql.log" />
<CustomAction Id="sqlcmd"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Return="check"
Execute="deferred"
Impersonate="yes" />
<InstallExecuteSequence>
<Custom Action="sqlcmd.cmd" After="InstallFiles">NOT Installed</Custom>
<Custom Action="sqlcmd" After="sqlcmd.cmd">NOT Installed</Custom>
</InstallExecuteSequence>
日志文件显示-i参数没有任何文件名值:
MSI(4C:6C)[09:58:15:610]:执行op:CustomActionSchedule(Action = sqlcmd,ActionType = 1025,Source = BinaryData,Target = CAQuietExec,CustomActionData =“sqlcmd.exe” -S(本地) -i“” -v var = SYSTEM_USER -o C:\ installSql.log)
答案 0 :(得分:1)
那不是<Binary>
的工作方式。 [#FileID]
语法用于动态使用组件文件的运行时安装完整路径。
二进制文件通常用作自定义操作的临时提取文件,或者在本例中是sql文件等。
考虑在wix中查看SQL扩展。作为一个最小的例子,请看一下这段代码。
添加sql命名空间xmlns:sql="http://schemas.microsoft.com/wix/SqlExtension"
<Binary Id="CreateSchema" SourceFile="..\SQL\CreateSchema.sql" />
<sql:SqlDatabase Id="MyDB" Database="[DATABASE]" Server="[DATABASE_SERVER]" />
在一个组件中你可以添加
<sql:SqlScript Id="CreateSchemaScript" BinaryKey="CreateSchema" ExecuteOnInstall="yes" Sequence="1" SqlDb="MyDB"/>
Here是SQL Schema定义的链接,包含所有可用元素。我还没有完成SQL扩展,所以你可能需要做一些阅读,以便更好地了解在安装时完成创建数据库需要做些什么。
答案 1 :(得分:1)
正如我所提到的,我想同时使用SQLCMD - 因为我的SQL脚本是SSDT格式,而二进制文件(所以文件将在安装结束时删除)。
在寻找答案之后,我明白我无法使用WiX [#filekey],因为只要没有正在运行的自定义操作,就不会提取二进制文件 - 明确地使用它。 所以最后我明白最好的方法是自己提取二进制文件。 我在一个自定义操作中使用的步骤是:
我遇到一些值得提及的问题,如果将文件保存到INSTALLDIR,而不是在自定义操作的tun时间目录可能不存在,那么请考虑将其保存到临时文件夹或预先创建目录。