【问题标题】:sqlcmd with jQuery in the insert statements在插入语句中使用 jQuery 的 sqlcmd
【发布时间】:2012-03-20 18:59:30
【问题描述】:

我需要做一些 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 选项会停止替换,但我仍然遇到错误。我还缺少其他东西吗?

【问题讨论】:

    标签: sql sql-server sqlcmd


    【解决方案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:\failsInSqlCmdMode.sql”中命令“#”附近第 2 行的语法错误。

    我在连接到 SQL Server 2008 R2 的 Windows 7 x64 上对此进行了测试。

    【讨论】:

    • 你有没有试过c:\failsInSqlCmdMode.sql实际上用:r c:\another\file.sql调用其他.sql文件。因为那是我的问题。
    • 我改变了我的方法,只是制作了一个 bat 文件,它为我需要确保应用 'x 获取的每个文件执行 sqlcmd。这似乎奏效了。感谢您的帮助!
    • 我从通过 SSMS 生成的备份脚本中得到了各种奇怪的语法错误。事实证明,一些列的 HTML 内容具有类似变量的语法。使用 -x 标志对我来说非常有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多