gpt4 book ai didi

tsql - Docker SQL字符串中的Escape Windows文件路径

转载 作者:行者123 更新时间:2023-12-02 18:38:58 25 4
gpt4 key购买 nike

我正在尝试构建一个已经安装了先前备份的sql server docker镜像。我的docker文件如下所示(我知道restore命令不正确):

FROM microsoft/mssql-server-windows-developer

RUN mkdir "C:\\SQLServer"

COPY Backup.bak C:\\SQLServer

ENV sa_password=verysecurepassword

ENV ACCEPT_EULA=Y

RUN sqlcmd -S 127.0.0.1 -Q "RESTORE DATABASE [MyDatabase] FROM DISK = N'C:\\SQLServer\\Backup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, NORECOVERY, STATS = 5"

当我使用此文件运行docker build时,出现以下错误:
Sqlcmd: 'DATABASE [MyDatabase] FROM DISK = NC:\\SQLServer\\Backup.bak WITH FILE = 1 NOUNLOAD REPLACE NOR
= 5': Unexpected argument. Enter '-?' for help.

如您所见,它去除了文件路径周围的单引号。我尝试转义单引号(带有反斜杠),但是引号仍然被删除,路径中还会留下多余的反斜杠。

如果直接在容器上运行sqlcmd,则可以运行restore命令(并得到有关未复制文件的错误,这是预期的)。在dockerfile sql字符串中嵌入Windows路径的格式是什么?

最佳答案

对于Docker,您应该使用\来绕开SQL的双引号

对于Powershell,应在文件名两边用单引号引起来,

RUN sqlcmd -S 127.0.0.1 -Q \"RESTORE DATABASE [MyDatabase] FROM DISK = N`'C:\\SQLServer\\Backup.bak`' WITH FILE = 1, NOUNLOAD, REPLACE, NORECOVERY, STATS = 5\"

关于tsql - Docker SQL字符串中的Escape Windows文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49273068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com