SQL Server 2008 R2 - sqlcmd bat 文件在文件夹中运行一批 sql 查询,但它们没有按文件名的顺序运行

Posted

技术标签:

【中文标题】SQL Server 2008 R2 - sqlcmd bat 文件在文件夹中运行一批 sql 查询,但它们没有按文件名的顺序运行【英文标题】: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 name 【发布时间】: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\HAZUSPLUs-s-rVR /d 
BC_Exposure_2016 -E -i"%%G"
pause

【问题讨论】:

我认为您可能需要运行此处指出的多个 bat 文件 (***.com/questions/2071408/…) 或通过 sql 代理运行 如果您想订购文件,powershell 可能是更好(更现代)的替代方案 【参考方案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\HAZUSPLUs-s-rVR /d BC_Exposure_2016 -E -i"%%G"
)
pause

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

【讨论】:

以上是关于SQL Server 2008 R2 - sqlcmd bat 文件在文件夹中运行一批 sql 查询,但它们没有按文件名的顺序运行的主要内容,如果未能解决你的问题,请参考以下文章

跪求SQL Server 2008 R2 Standard (64

SQL Server2008和SQL Server2008R2的区别,高手速进

SQL Server 2008 R2 Express三个版本有啥区别?

sql server2008升级到2008 R2出现问题

数据库SQL server 2008 R2和SQL server 2008 能一起安装吗?为啥安装完只剩SQL server 2008 R2一个了?

windows server2012 r2能安装sqlserver2008 R2吗