首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

批次檔自動匯入大量 SQL 腳本:解決千檔手動執行難題

     編輯:關於SqlServer

當 DBA 匯出數千個資料庫物件(預存程序、函數、視圖等)的建立腳本為獨立檔案時,逐一手動執行顯然不切實際。本文提供一個 Windows 批次檔,可自動掃描指定目錄下所有腳本檔,彙整成單一 list.sql,再透過 SQL*Plus 的 @ 指令一次匯入目標資料庫,大幅簡化部署流程。

應用場景

  • 來源:上千個 .PRC、.FNC、.VW 等腳本檔,可能分佈於子目錄。
  • 目標:將所有物件建立腳本合併並導入另一資料庫。
  • 環境:Windows XP / Server 2003 以上,已安裝 Oracle Client (SQL*Plus)。

批次檔完整程式碼

@echo off
if exist list.sql del list.sql /q

:input
cls
set input=
set /p input= 請輸入要掃描的腳本目錄路徑:
set "input=%input:"=%"
if "%input%"=="" goto input
if not exist "%input%" goto input

for /f "delims=" %%i in ('dir /b /a-d /s "%input%"') do echo @@%%~fnxi>>list.sql

if not exist list.sql goto no_file
start list.sql
exit

:no_file
cls
echo %cd% 發生錯誤,未成功生成 list.sql 腳本!
pause

操作步驟

  1. 將上述程式碼另存為 gen_sql_list.bat。
  2. 雙擊執行,輸入腳本檔所在根目錄(例如 E:\CRY)。
  3. 批次檔會遞迴掃描所有子目錄,產生 list.sql,內容格式如:
    @@E:\CRY\TEST.PRC
    @@E:\CRY\123\TEST1.FNC
    @@E:\CRY\TEST2.VW
  4. 執行完成後會自動用預設編輯器開啟 list.sql 供確認。
  5. 開啟 SQL*Plus,以目標用戶登入,執行:
    @D:\list.sql(假設檔案在 D 槽)。

重要提醒

物件建立順序問題: 此法僅按檔名排序執行,未考慮物件相依性(如視圖依賴表、函數被預存程序呼叫)。匯入後大量物件可能處於 INVALID 狀態,務必於匯入完成後重新編譯所有無效物件:

-- Oracle 重新編譯無效物件範例
BEGIN
    FOR cur IN (SELECT object_name, object_type FROM user_objects WHERE status = 'INVALID') LOOP
        EXECUTE IMMEDIATE 'ALTER ' || cur.object_type || ' ' || cur.object_name || ' COMPILE';
    END LOOP;
END;
/

進階優化建議

  • 若腳本檔命名包含順序前綴(如 01_TABLE.sql, 02_VIEW.sql),可自然滿足相依順序。
  • 可擴充批次檔加入 sqlplus -L user/pwd@db @list.sql 實現全自動無人值守部署。
  • 對於 SQL Server 環境,可改用 sqlcmd -i list.sql 並將 @@ 改為 :r。

這個簡單的批次檔解決了大量腳本檔手動部署的痛點,配合後續的無效物件重編譯,即可快速完成跨資料庫的物件遷移與同步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved