SQLCMD передает двойную кавычку в переменную сценария - PullRequest
2 голосов
/ 10 августа 2011

Я пытаюсь передать двойную кавычку переменной сценария в 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 ]

3 голосов
/ 10 августа 2011

Если ваш 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).Он вставляет запись в табличную переменную @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"
2 голосов
/ 11 августа 2011

Исходя из вашего примера, вам не нужно включать кавычки в переменную, так как они могут быть в команде sql, например:

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

и

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

(хотя я более привык использовать одинарные кавычки, как в ,'$(Parameter)'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...