Почему не удается выполнить команду создания базы данных в программе SQLCMD в окне настройки SQL Server для Linux?

#sql-server #docker

Вопрос:

Я использую docker-compose.yml для загрузки образа SQL Server в контейнер. После того, как он запущен и запущен, я создаю command.sh оболочку и пытаюсь запустить ее для создания базы данных.

 # command.sh
echo 'creating database from ->' $ModuleName
export query="'create database $ModuleName'"
echo $query
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P my_strong_password -Q $query
 

И это дает мне эту ошибку:

Sqlcmd: «база данных»: Неизвестный Параметр. Введите «-?» для получения помощи.

Пожалуйста, обратите внимание, что я не могу использовать -i переключатель для использования входного .sql файла, потому что я программно создаю свои запросы в оболочке на основе переменных среды.

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

1. Указывает ли вывод sqlcmd -? (в linux), что вы должны использовать двойные кавычки? Если это так, попробуйте заменить одинарные кавычки ( ' ) на экранированные двойные кавычки ( " ). query=""create database $ModuleName""

2. вторым вариантом может быть создание временного sql-файла (т. Е. /tmp/piepeloi.sql ) с содержащимися в нем командами, которые вам необходимо выполнить.

3. @Luuk, оба ваших комментария помогли мне. Можете ли вы опубликовать их в качестве ответа, чтобы я мог их принять?

Ответ №1:

Вывод sqlcmd -? показывает, как использовать -Q опцию then. На окнах это написано [-Q "cmdline query" and exit] .

Но Windows и Linux отличаются (или не согласованы) в использовании одинарных или двойных кавычек.

Первый вариант — попробовать: sqlcmd -Q ""create database $ModuleName""

Второй вариант-это:

  • Создайте временный файл (т. Е. /tmp/tmp.sql ) и поместите инструкцию SQL в этот сценарий.
  • Используйте -i /tmp/tmp.sql для выполнения этого сценария.