SQLCMD将双引号传递给脚本变量

时间:2011-08-10 17:49:57

标签: sql-server sqlcmd

我正在尝试将双引号传递给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

2 个答案:

答案 0 :(得分:3)

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

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

然后你可以通过将参数括在单引号中来获得一个被双引号括起来的值到@myValue:

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

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

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

希望有所帮助。

修改
此示例适用于我(在SQL Server 2008,Windows Server 2K3上测试)。它将一条记录插入表变量@MyTableDescription字段中的值用双引号括起来:

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"

答案 1 :(得分: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)'