我需要对MSSQL数据库进行一些播种,并且我有许多需要按顺序运行的sql文件。
基本上我有一个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
选项会停止替换,但我仍然遇到错误。我错过了别的什么吗?
答案 0 :(得分: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:错误:文件'C:\ failedInSqlCmdMode.sql'中命令'#'附近第2行的语法错误。
我在连接到SQL Server 2008 R2的Windows 7 x64上测试了这个。