【问题标题】:SQLCMD passing in double quote to scripting variableSQLCMD 将双引号传递给脚本变量
【发布时间】:2011-08-10 17:49:57
【问题描述】:

我正在尝试将双引号传递给 SQLCMD 中的脚本变量。有没有办法做到这一点?

sqlcmd -S %serverName% -E -d MSDB -i MyScript.sql -m 1 -v Parameter="\""MyValueInDoubleQuote\""" 

我的sql脚本如下:

--This Parameter variable below is commented out since we will get it from the batch file through sqlcmd
--:SETVAR Parameter "\""MyValueInDoubleQuote\"""


INSERT INTO [MyTable]
           ([AccountTypeID]
           ,[Description])
     VALUES
           (1
           ,$(Parameter))
GO

【问题讨论】:

    标签: sql-server sqlcmd


    【解决方案1】:

    如果您以这种方式设置了 sql 脚本:

    DECLARE @myValue VARCHAR(30)
    SET @myValue = $(MyParameter)
    SELECT @myValue
    

    然后,您只需将参数括在单引号中即可将双引号括起来的值放入@myValue:

    sqlcmd -S MyDb -i myscript.sql -v MyParameter='"123"'
    

    这是可行的,因为 -v 将用文本 '"123"' 替换 $(MyParameter) 字符串。生成的脚本在执行之前将如下所示:

    DECLARE @myValue VARCHAR(30)
    SET @myValue = '"123"'
    SELECT @myValue
    

    希望对您有所帮助。

    编辑
    此示例对我有用(在 SQL Server 2008、Windows Server 2K3 上测试)。它在表变量@MyTable中插入一条记录,Description字段中的值用双引号括起来:

    MyScript.sql(不需要 setvar):

    DECLARE @MyTable AS TABLE([AccountTypeID] INT, [Description] VARCHAR(50))
    
    INSERT INTO @MyTable ([AccountTypeID] ,[Description])
    VALUES(1, $(Parameter))
    
    SELECT * FROM @MyTable
    

    SQLCMD:

    sqlcmd -S %serverName% -E -d MSDB -i MyScript.sql -m 1 -v Parameter='"MyValue"'
    

    如果您运行该脚本,您应该得到以下输出,我认为这就是您要查找的内容:

    (1 rows affected)
    AccountTypeID Description
    ------------- --------------------------------------------------
                1 "MyValue"
    

    【讨论】:

    • 我会尝试这条路线,但我使用的是脚本变量。所以我的变量如下: :SETVAR MyVar "MyValue"
    • 好的。如果我的建议不起作用,您可以在问题中发布您的 SQL 脚本示例吗?
    • 在问题中发布了我的 sql 脚本
    • 我很乐意更新我的答案,但您对问题的更新有点令人困惑。您是否使用 SETVAR?
    • 我更新了我的 sql 脚本。我正在尝试使用 -v 标志从 SQLCMD 定义它的 SetVar。因此在 SQL 脚本中 SetVar 被注释掉了。
    【解决方案2】:

    根据您的示例,您不需要在变量中包含引号,因为它们可以在 sql 命令中,如下所示:

    sqlcmd -S %serverName% -E -d MSDB -i MyScript.sql -m 1 -v Parameter="MyValueNoQuotes"
    

    和

    INSERT INTO [MyTable]
                ([AccountTypeID]
                ,[Description])
          VALUES
                (1
                ,"$(Parameter)")
    

    (虽然我比较习惯用单引号,比如,'$(Parameter)'

    【讨论】:

    • 这会将其脚本化为 MyValueNoQuotes。我希望有一个转义键可以放入双引号。
    • 似乎在 sqlcmd 级别,当我作为“”“MyValue”“”传入时,它会输出为““MyValue”。虽然我想获得“MyValue”但我做不到。
    • 我在这里遗漏了一点:为什么双引号需要包含在 SQLCMD 变量中?我建议将它们“移动”到 SQL 代码中,这样它们就不需要成为变量的一部分。在您的代码中,您仅使用它们来分隔正在写入Description 列的字符串值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2017-10-31
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多