SQLCMD:r , где path — переменная

#sqlcmd

#sqlcmd

Вопрос:

Поддерживает ли команда SQLCMD непостоянные литеральные пути :r ?

Например:

 setvar $(path1) '.script.sql'
:r $(path1) -- SQL01260: A fatal parser error occurred: .
:r '$(path1)' -- SQL01260: A fatal parser error occurred: .
:r "$(path1)" -- SQL01260: A fatal parser error occurred: .
  

Ответ №1:

Поддерживает ли команда SQLCMD : r непостоянные литеральные пути?

Это так. Вы неправильно определяете свою переменную. Попробуйте:

 :setvar path1 "script.sql"
:r $(path1)
  

Смотрите также эту статью о MSDN.

Комментарии:

1. есть ли такая возможность, как :r $(path)module_v$(milesone)1_AlterScript.sql

Ответ №2:

Просто публикую это здесь в качестве примера для других, чтобы сэкономить время, которое я только что потерял.

файл test_setvar.sql содержит следующее

 -- :r test_setvar.sql
:reset

:setvar Name "filename"
print '$(Name)'
-- :setvar OutName '$(Name)'  -- NO wont work
-- :out $(OutName).txt
:r $(Name).sql  -- filename.sql exists and prints "Hello World"
:out $(Name).txt  -- filename.txt is created  

go
:out stdout
  

Здесь четко указано.

Примечание: Двойные кавычки необходимы, например, для строк, состоящих из нескольких частей, и полей с :out

 :out "string bit"$(field1)"string bit2"$(field2)
  

Заключение в одинарные кавычки не будет работать с :out для этого.

Но… В запросе требуется перенос в двойные или одинарные кавычки.

 where col.name LIKE "%"   "$(SEARCH_STRING)"   "%"
  

Ответ №3:

Проблема не в файле VS lists в списке ошибок, а скорее в файле, на который вы ссылаетесь.

Следует выполнить поиск синтаксической ошибки для файла, на который вы ссылаетесь. Для вашего примера .script.sql