Docker с SQL Server не может вставить значения в базу данных с помощью sqlcmd - PullRequest
0 голосов
/ 05 июля 2019

У меня есть файл Docker, куда я импортирую две базы данных.

    FROM mcr.microsoft.com/mssql/server

    RUN mkdir -p /var/opt/mssql/backup
    COPY clean_SCManager.bak /var/opt/mssql/backup/SCManager.bak
    COPY clean_SCServer.bak /var/opt/mssql/backup/SCServer.bak
    COPY SCManager-setup.sql /var/opt/mssql/SCManager-setup.sql
    COPY startup.sh /var/opt/mssql/startup.sh

    ENV MSSQL_SA_PASSWORD=P@ssw0rd
    ENV ACCEPT_EULA=Y

    RUN chmod +x  /var/opt/mssql/startup.sh
    CMD /var/opt/mssql/startup.sh

    EXPOSE 1433

Теперь я хочу вставить некоторые значения в одну из моих баз данных, для этого я использую файл SQL, который содержит команду INSERT INTO.

    USE SCManager;
    GO

    INSERT INTO epls_dbo.Account("uid", "login", "password_hash", "lastLogin", "failedLogins", "locked", "role", "locale", "accountPenIdUid") 
    VALUES (4294967306, 'sysadm', '2398ef2774cd07f31037e9347de3e660', '2017-09-12 14:50:35.607', 0, 'False', 'Admin', 'en_US', NULL);

Этот SQL будет вызываться скриптом bash, в этом я использую sqlcmd для выполнения скрипта SQL.

    #/bin/bash
    echo "startup.sh is called, starting sqlserver"
    /opt/mssql/bin/sqlservr &
    echo "start sleeping for 20 seconds"
    sleep 20
    echo "sleeping done"

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/SCServer.bak'"
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/SCManager.bak'"
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE DATABASE SCManager FROM DISK = '/var/opt/mssql/backup/SCManager.bak' WITH MOVE 'SCManager' TO '/var/opt/mssql/data/SCManager.mdf', MOVE 'SCManager_log' TO '/var/opt/mssql/data/SCManager_log.ldf'"
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE DATABASE SCServer FROM DISK = '/var/opt/mssql/backup/SCServer.bak' WITH MOVE 'SCServer' TO '/var/opt/mssql/data/SCServer.mdf', MOVE 'SCServer_log' TO '/var/opt/mssql/data/SCServer_log.ldf'"
    sleep 10
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -d SCManager -P "P@ssw0rd" -i "/var/opt/mssql/SCManager-setup.sql"

    tail -f /dev/null

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

    Changed database context to 'SCManager'.

Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'uid.

Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'логин'.

Сообщение 207, уровень 16, состояние 1, сервер fb5db2041be5, строка 4
Неверное имя столбца 'пароль_хэш'.

Msg 207, уровень 16Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'lastLogin'.

Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'failedLogins'.

Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Недопустимое имя столбца «заблокировано».

Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'роль'.

Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, строка 4
Неверное имя столбца 'locale'.

Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'accountPenIdUid'.

Когда я подключаюсь к работающему док-контейнеру, я могу запроситьбаза данных, таким образом, база данных доступна и таблица, которую я хочу вставить в выходы

root@fb5db2041be5:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -d SCManager -Q "select * from epls_dbo.Account"
    uid                  login                                                                                                                                                                                                                                                            password_hash                    lastLogin               failedLogins locked role
                                  locale accountPenIdUid
    -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------- ----------------------- ------------ ------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ --------------------

    (0 rows affected)

Также я могу выполнить в bash мою команду вставки в команду, она правильно вставляет значения, почему это не работаетпозвонив из моего скрипта bash?

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