2012-03-20 48 views
3

我需要做一些MSSQL数据库的种子,我有许多需要按顺序运行的sql文件。sqlcmd与插入语句中的jQuery

基本上我有一个start.sql文件...

SET NOCOUNT ON 
GO 

PRINT 'First File' 
:r "c:\sql\firstfile.sql" 

PRINT 'Second File' 
:r "c:\sql\secondfile.sql" 

而且我与sqlcmd -S LOCALHOST\SqlExpress -E -i "C:\sql\start.sql" -x

的问题是,我将HTML数据到数据库中的一个文件,并运行此它有一些脚本引用,其中包含jQuery $('#stuff')。这是由于SQL变量替换引发的语法错误。

我希望-x选项将停止替换,但我仍然有错误。我错过了别的吗?

回答

1

SQL Command Mode应该将$(something)视为variable

当SQLCMD模式下,PRINT '$test'结果将是$test,但在执行PRINT '$(test)'将返回消息'test' scripting variable not defined.使用-x选项(小写 X)不应该返回的消息,虽然。

我测试了这一点通过运行在Windows命令提示符下输入:

sqlcmd -S localhost -E -i "c:\failsInSqlCmdMode.sql" -x 

凡.SQL脚本包含以下SQL:

declare @test varchar(10) 
set @test = '$(#stuff)' 
select @test 
go 

结果是:

---------- 
$(#stuff) 

(1 rows affected) 

只有当我从命令结尾删除-x时,出现错误:

Sqlcmd: Error: Syntax error at line 2 near command '#' in file 'C:\failsInSqlCmdMode.sql'.

我在连接到SQL Server 2008 R2的Windows 7 x64上测试了这一点。

+0

你有没有尝试用':c:\ failsInSqlCmdMode.sql'实际上用':r c:\ another \ file.sql'调用其他.sql文件。因为这是我的问题。 – jcreamer898 2012-03-21 14:53:37

+0

我改变了我的方法,只是做了一个bat文件,为我需要的每个文件都做一个sqlcmd,以确保应用了'x'。这似乎工作。谢谢您的帮助! – jcreamer898 2012-03-21 18:10:07

+0

我从通过SSMS生成的备份脚本中收到各种奇怪的语法错误。发现一些列的HTML内容具有类似于变量的语法。使用'-x'标志对我来说非常合适。 – daveaglick 2014-12-03 14:40:59