创建执行SQL脚本的bat文件

创建执行SQL脚本的bat文件,sql,batch-file,automation,Sql,Batch File,Automation,我有一个文件夹,在每个星期的sprint之后,许多MSQL脚本都会被放入其中。例如,今天有10个脚本被放入该文件夹中。然后,我必须单独打开每个脚本,并在适用的数据库上运行它。需要对其运行的数据库位于文件名中。 e、 g.[2][CRMdata]UpdateProc.sql [2]表示它的运行顺序,因此需要先运行脚本[1]。 [CRMdata]是我必须运行它的数据库 这个过程非常烦人,特别是如果有50个脚本要按顺序运行。 我想知道有没有更简单的方法? Perhpas是一个.bat文件,它读取文件名

我有一个文件夹,在每个星期的sprint之后,许多MSQL脚本都会被放入其中。例如,今天有10个脚本被放入该文件夹中。然后,我必须单独打开每个脚本,并在适用的数据库上运行它。需要对其运行的数据库位于文件名中。 e、 g.[2][CRMdata]UpdateProc.sql

[2]表示它的运行顺序,因此需要先运行脚本[1]。 [CRMdata]是我必须运行它的数据库

这个过程非常烦人,特别是如果有50个脚本要按顺序运行。 我想知道有没有更简单的方法? Perhpas是一个.bat文件,它读取文件名,并根据脚本编号按顺序执行脚本,以及根据文件名中指定的数据库执行脚本

非常感谢您的帮助。
谢谢。

首先,当您需要运行时,请考虑使用SQLServer作业代理程序。这是安排简单事情的好方法

对于这样的任务,我建议将PowerShell与sqlcmd结合使用。这个命令实际上是您问题的答案,因为它将从命令行运行脚本


然而,更进一步。计划一个每周运行一次的作业,或者在需要运行的时候运行一次。让它包含一个步骤,一个PowerShell脚本。然后可以循环遍历目录中的所有脚本,从名称中提取文件名,并使用sqlcmd运行脚本。在此过程中,还要将您正在做的事情记录在一个表中,以便您可以发现错误。

我不知道如何使用MSQL执行SQL。您必须了解如何使用为MSQL提供的任何命令行实用程序针对适当的数据库运行每个脚本

我可以帮助您创建一个批处理文件,该批处理文件将按照正确的顺序对SQL文件进行排序,并解析出数据库的名称

如果序列号的前缀为零,且宽度恒定,则批处理作业会容易得多。我假设可以重命名这些文件,所以这就是这个解决方案的作用

我还假设您要处理的文件永远不会超过999个。代码可以很容易地修改以处理更多的问题

如果任何文件名包含以下内容,则必须进行一些更改!字符,因为延迟扩展将破坏FOR变量的扩展。但这是一个不太可能出现的问题

@echo off
setlocal enableDelayedExpansion

:: Change the definition to point to the folder that contains the scripts
set "folder=sqlCodeFolder"

:: The mask will only match the pattern that you indicated in your question
set "mask=[*] [*]*.sql"

:: Rename the .sql files so that the sequence numbers are zero prefixed
:: to width of 3. This enables the default alpha sort of the directory to be
:: in the proper sequence
for /f "tokens=1* delims=[]" %%A in ('dir /b "%folder%\%mask%"') do (
  set seq=00%%A
  ren "%folder%\[%%A]%%B" "[!seq:~-3!]%%B"
)

::Process the renamed files in order
for %%F in ("%folder%\%mask%") do (
  for /f "tokens=2 delims=[] " %%D in ("%%~nF") do (
    rem %%F contains the full path to the sql file
    rem %%D contains the name of the database, without enclosing []
    rem Replace the echo line below with the proper command to run your script
    echo run %%F against database [%%D]
  )
)

我假设这是Windows,因为你说的是批处理文件。如果您使用更好的脚本语言,例如通过Windows脚本主机或Powershell使用VBscript或Javascript,您将不会那么沮丧。有了其中的一个,读取文件名、解析文件名并生成命令或多或少都很简单。使用FileSystemObject获取脚本列表。什么是MSQL?MS SQL还是MySQL?