почему sqlcmd -v foo = "c: \ path" съел "c:"? - PullRequest
1 голос
/ 13 января 2010

У меня есть foo.sql как:

print 'foo=$(foo)'

Тогда у меня в foo.cmd есть следующий скрипт:

sqlcmd -i foo.sql -v foo="c:\path"

Запуск печати foo.cmd:

foo=\path

как мне избежать "c:"? Дос-шелл ест это, или это sqlcmd?

Ответы [ 4 ]

1 голос
/ 13 января 2010

Разделители аргументов cmd включают знак равенства. В других случаях (например, bjam.exe) я видел, что вся последовательность параметров должна быть заключена в кавычки для правильной работы.

Попробуйте это:

sqlcmd -i foo.sql -v "foo=c:\path"

Если он по-прежнему удаляет часть "c:", я бы сосредоточился на sqlcmd. Я лично не установил его для тестирования. Это основано исключительно на опыте подобных ситуаций.

0 голосов
/ 21 октября 2014

Использование другой оболочки вызывает это.

У меня просто так было при запуске sqlcmd через powershell. Перешел на использование cmd.exe и все заработало

двойные кавычки для экранирования ":" и одинарные кавычки, чтобы sql рассматривал значение переменной как строку. например,

sqlcmd -S. -d myDb -i. \ test.sql -v pathToFile = "'D: \ Temp \ temp \ My.csv'"

0 голосов
/ 14 января 2010

ОК, моя ошибка. вышесказанное работает.

Что я сделал не так: sqlcmd -i foo.sql -v foo = 'c: \ path'

(одиночная кавычка, так как я пытался передать их как '' строку sql), которая не будет работать. это порубит C:

0 голосов
/ 13 января 2010

избежать обратной косой черты,

sqlcmd -i foo.sql -v foo="c:\\path"

Это на самом деле твоя скорлупа ест \

...