2012-05-24 80 views
1

我有一个文件夹,在每个每周冲刺之后,大量的MSQL脚本将被放入其中。例如,今天将10个脚本放入文件夹中。然后我必须单独打开每个脚本并针对适用的数据库运行它。它需要运行的数据库位于文件的名称中。 例如[2] [CRM数据] UpdateProc.sql创建一个执行SQL脚本的bat文件

[2]代表运行的顺序,所以脚本[1]需要在它之前运行。 [CRMdata]是我必须运行它的数据库。

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

任何帮助,非常感谢。 谢谢。

+3

我假设这是Windows,因为你说“批处理文件”。如果您使用更好的脚本语言(例如通过Windows Scripting主机的VBscript或Javascript或PowerShell),则可以减少挫折时间。有了其中之一,它可能或多或少是微不足道的(读取文件名,解析它们并构建您的命令)。 – theglauber

+0

我肯定会使用VBScript这一个。使用FileSystemObject获取脚本列表。 – Ben

+1

什么是'MSQL'? 'MS SQL'或'MySQL'? –

回答

0

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

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

但是,更进一步。安排每周运行一次的作业(或者每当你想运行时)。它包含一个步骤,一个PowerShell脚本。然后,它可以遍历目录中的所有脚本,从名称中提取文件名,然后使用sqlcmd运行脚本。一路走来,还要记录你在桌子上做什么,以便发现错误。

0

我对使用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] 
) 
) 
相关问题