【发布时间】:2020-07-30 07:33:41
【问题描述】:
我正在尝试使用 sqlcmd 实用程序执行 4000 多个(约 140GB)脚本。
这样做的原因是从 SQL Server 2017 到 2008 的所有导出选项都因错误而失败,因此我决定使用 SSMS 中的“生成脚本”为整个数据库编写脚本,然后通过批处理文件执行所有生成的脚本,然后记录每个错误,以便我可以查明每个脚本中的问题是(或不是)。
到目前为止,我设法确定 2008 年并不真正喜欢某些表中的日期格式,这很奇怪,因为该数据库是今年早些时候从 SQL SRV 2008 导出到 2017 年的。
反正我写的bach脚本是这样的:
for %%G in (*.sql) do (
if not %errorlevel% == 0 echo %errorlevel% >> errorlog.txt 2>&1
if %errorlevel% == 0 sqlcmd /S SQLINSTANCE /d DBNAME -E -i"%%G"
)
pause
脚本正确执行(一次插入 1 行),但创建和附加“errorlog.txt”除外 - 这个文件甚至没有在进程中创建,当我尝试手动创建它时,没有附加任何内容到这个文件。当我尝试在第 4 行创建“successlog.txt”时,该文件已正确创建并附加。
请问有人对我现在可以采取的步骤有任何指导吗?
【问题讨论】:
-
你正在检查
ErrorLevel(实际上是由于缺少delayed expansion而错误,但是什么命令? -
我想检查循环执行的上述 SQL 脚本的错误级别。我对批处理文件真的很陌生,所以我把它放在一起
-
for %%G in (*.sql) do ( … )枚举(或列出或循环)SQL脚本,但它确实不执行它们,因此没有ErrorLevel价值…… -
在这种情况下 - 请从 sql cmd 获取 ErrorLevel 值的最佳方法是什么?
-
不太喜欢日期格式,这可能是一个错误的假设和“跳到结论”。更有可能是您的环境没有安装相同的选项集,并且您的代码对日期文字的格式做出了假设。但我假设您实际上将日期存储在一种相关的数据类型中,而不是作为字符串或数字。
标签: sql-server batch-file cmd sqlcmd