如何在Dockerfile中运行SQL脚本以填充Microsoft SQL Docker镜像?

问题描述 投票:0回答:1

我已经从Docker Hub下载了Microsoft SQL Server Express映像。我试图通过添加空数据库的空数据库来扩展它,并将该输出作为一个图像,然后我可以在整个项目中使用它。

如何运行以下SQL脚本?

initdb.sql

USE MASTER
GO

CREATE DATABASE MyDB1
GO

CREATE TABLE [dbo].[MyTable1]
(
    [Id] INT NOT NULL,
    [Name] NVARCHAR(256) NOT NULL,
)

CREATE TABLE [dbo].[MyTable2]
(
    [Id] INT NOT NULL,
    [Name] NVARCHAR(256) NOT NULL,
)
GO

-- Create database and tables for Clinical
CREATE DATABASE MyDB2
GO

CREATE DATABASE MyDB3
GO

这是我到目前为止的Dockerfile:

FROM microsoft/mssql-server-windows-express AS base
WORKDIR /app

ENV ACCEPT_EULA Y
ENV sa_password supersecretpassword

FROM base AS final
WORKDIR /app

我不知道是否使用CMD命令或以某种方式调用SQLCMD,但我没有正确的方法来做到这一点。

任何帮助将不胜感激。

sql-server docker dockerfile
1个回答
0
投票

希望有人会有比这更好的解决方案,但我最终写了一个小C#函数来做到这一点。由于我正在使用SQL docker来进行一些基于C#的自动化测试,因此添加它并不是什么大不了的事情,这在:

private bool SqlServerScript(string connection, string filename) {
  try {
    using (SqlConnection sqlConnection = new SqlConnection(connection)) {
      sqlConnection.Open();
      SqlCommand sqlCommand = new SqlCommand(File.ReadAllText(filename), sqlConnection);
      sqlCommand.ExecuteNonQuery();
      return true;
    }
  } catch {
  }
  return false;
}

(错误处理留给读者练习)

© www.soinside.com 2019 - 2024. All rights reserved.