2012-05-24 115 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] 
) 
) 
相關問題