【问题标题】:SQL Server 2008 R2 - sqlcmd bat file to run a batch of sql queries in folder but they are not running in order of file nameSQL Server 2008 R2 - sqlcmd bat 文件在文件夹中运行一批 sql 查询,但它们没有按文件名的顺序运行
【发布时间】:2017-09-19 05:53:17
【问题描述】:

我有一堆我写的写好的 sql 脚本,我希望在一个文件夹中按顺序运行。阅读后,我求助于创建一个包含使用 sqlcmd 的 bat 文件。对于这组特定的脚本,当我运行 bat 时,它似乎没有按顺序运行。我不知道发生了什么,因为我尝试在开头使用前缀数字重命名 sql 脚本,尝试使用字母,甚至使用 Windows 资源管理器将整个脚本重命名为数字/字母。

这个过程可能看起来像这样 A.sql - B.sql - C.sql - D.sql - F.sql - G.sql - E.sql

关于我缺少什么或我如何错误地重命名这些文件有什么想法吗?谢谢

我的 bat 文件中有什么

for %%G in (*.sql) do sqlcmd /S W-VAN-A124178\HAZUSPLUSSRVR /d 
BC_Exposure_2016 -E -i"%%G"
pause

【问题讨论】:

  • 我认为您可能需要运行此处指出的多个 bat 文件 (stackoverflow.com/questions/2071408/…) 或通过 sql 代理运行
  • 如果您想订购文件,powershell 可能是更好(更现代)的替代方案

标签: sql-server sql-server-2008 batch-file sqlcmd


【解决方案1】:

您可以解析dir 命令的输出,您可以对其进行修改,以便文件按字母顺序显示。为此,您可以使用 dir /A-D /B /ON:
/A-D 排除目录
/B 排除许多在解析时烦人的杂乱附加信息
/ON 按名称排序

所以要修改你的代码:

for /f %%G in ('dir /A-D /B /ON') do (
  sqlcmd /S W-VAN-A124178\HAZUSPLUSSRVR /d BC_Exposure_2016 -E -i"%%G"
)
pause

应该可以。我在循环周围加上括号。一次是因为我已经习惯了,而且代码被分成两行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多