Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Wix-二进制文件中的SQL方括号_Sql Server_Wix - Fatal编程技术网

Sql server Wix-二进制文件中的SQL方括号

Sql server Wix-二进制文件中的SQL方括号,sql-server,wix,Sql Server,Wix,更新: 虽然下面的答案可以作为替代解决方案,但我想指出的是,我最初的方法实际上是可行的。在查看了下面的答案之后,我发现我的Session.Log()调用在将[…]发布到日志文件时实际上正在剥离它。当我将SQL输入SQLCommand对象时,方括号仍保留在SQL中。实际上,我的问题是SQL(我只发布了其中的前几行)中有'GO',这不是SQL命令。一旦我解决了这个问题,一切都正常了:) *(提醒,发布尽可能多的信息总是有帮助的:D) 在Wix中,我将SQL文件存储在二进制元素中 <Binar

更新:

虽然下面的答案可以作为替代解决方案,但我想指出的是,我最初的方法实际上是可行的。在查看了下面的答案之后,我发现我的Session.Log()调用在将[…]发布到日志文件时实际上正在剥离它。当我将SQL输入SQLCommand对象时,方括号仍保留在SQL中。实际上,我的问题是SQL(我只发布了其中的前几行)中有'GO',这不是SQL命令。一旦我解决了这个问题,一切都正常了:)

*(提醒,发布尽可能多的信息总是有帮助的:D)


在Wix中,我将SQL文件存储在二进制元素中

<Binary Id="SQLStep1" SourceFile="SourceDir\Step1_SQL_Build.sql"></Binary>
<Binary Id="SQLStep2a" SourceFile="SourceDir\Step2a_SQL_Build.sql"></Binary>
<Binary Id="SQLStep2b" SourceFile="SourceDir\Step2b_SQL_Build_sp_iv6Login.sql"></Binary>
<Binary Id="SQLStep2c" SourceFile="SourceDir\Step2c_SQL_Grant.sql"></Binary>
示例SQL语句如下所示:

USE [master]
GO
/****** Object:  Database [DB_NAME]    Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE [DB_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
GO
然而,我从“Binary”表中得到的字符串似乎会提取所有[…]内容,就像它们是WiX属性一样,所以我只剩下

USE 
GO
/****** Object:  Database     Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE  COLLATE SQL_Latin1_General_CP1_CI_AS
GO

是否可以设置一个标志,使WiX不认为SQL语法是WiX属性?

我不熟悉WiX,但您看到的属性替换似乎已经解释清楚了

在SQL Server中,标识符可以使用引号代替方括号(请参阅)。例如:


我看到您的脚本看起来像是已经生成的,但我想知道是否有可能在生成脚本后对其进行后期处理,以便在运行Wix之前用引号替换标识符的所有方括号?

必须转义二进制文件中的方括号。所以

USE \[master\]
GO
/****** Object:  Database \[DB_NAME\]    Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE \[DB_NAME\] COLLATE SQL_Latin1_General_CP1_CI_AS
GO
请注意,您可以通过设置一个名为
DB_NAME
的属性来利用这一点,然后WiX会将该属性更改为您的实际数据库名称

您的另一个选择可能是将整个内容视为CDATA,例如

<![CDATA[USE [master]
GO
/****** Object:  Database [DB_NAME]    Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE [DB_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
GO]]>

但我不确定这是否有效


当然,您也可以简单地不使用二进制表,而是以其他方式打包文件。将它们作为资源直接嵌入到自定义操作DLL中,并从中取出它们,如中。

注意,CDATA不起作用,但嵌入的却起作用。我个人需要SQL保持可使用性,而不仅仅是wix,因此转义字符和CDATA选项对我个人来说不起作用,其他人可能有不同的需求。很高兴听到-我不太确定二进制元素的CDATA,我知道在其他地方作为元素内容它可以工作。顺便说一句,对于问题的日志部分,可以将要登录的内容存储到属性中。然后可以选择记录一个引用属性的字符串,但由于详细日志已经记录了属性值,因此您可能可以跳过该部分。
USE \[master\]
GO
/****** Object:  Database \[DB_NAME\]    Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE \[DB_NAME\] COLLATE SQL_Latin1_General_CP1_CI_AS
GO
<![CDATA[USE [master]
GO
/****** Object:  Database [DB_NAME]    Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE [DB_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
GO]]>