Advertisement
cancelpc

attach_db_v2.cmd

Dec 10th, 2019 (edited)
672
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @echo off
  2. rem ###################################
  3. rem
  4. rem 產生自動掛載 SQL
  5. rem
  6. rem ###################################
  7. setlocal
  8.  
  9. rem 變數
  10. set _DB_PATH_=d:\SQL_DATA
  11. set _OUT_SQL_=attach_dbs.sql
  12.  
  13. :MAIN
  14. cls
  15. rem 檔頭
  16. echo /*> %_OUT_SQL_%
  17. echo. 自動掛載 SQL>> %_OUT_SQL_%
  18. echo */>> %_OUT_SQL_%
  19.  
  20. rem 產出 Script
  21. for %%A in (%_DB_PATH_%\*.mdf) do call :ATTACH %%A
  22.  
  23. rem 印出 Script
  24. type %_OUT_SQL_%
  25.  
  26. endlocal
  27. goto END
  28.  
  29. rem ===================================
  30. rem ATTACH db_filename
  31. rem
  32. rem ===================================
  33. :ATTACH
  34. set _DB_NAME_=%~n1
  35.  
  36. rem 判斷是否為獨檔或分檔
  37. set _DB_PREFIX_N_=%_DB_NAME_:~0,-1%
  38. set _DB_SUFFIX_1_=%_DB_NAME_:~-1%
  39. set _DB_DATAFILE_2_=%_DB_PATH_%\%_DB_PREFIX_N_%2.ndf
  40. set _DB_FILEGROUP_=PRIMARY
  41. if %_DB_SUFFIX_1_%==1 (
  42.     if exist %_DB_DATAFILE_2_% (
  43.         set _DB_NAME_=%_DB_PREFIX_N_%
  44.         set _DB_FILEGROUP_=SECONDARY
  45.     )
  46. )
  47. echo 處理資料庫 %_DB_NAME_% (%_DB_FILEGROUP_%) ...
  48. goto _%_DB_FILEGROUP_%
  49. goto END
  50. rem -----------------------------------
  51. :_PRIMARY
  52. echo.>> %_OUT_SQL_%
  53. echo -- %_DB_NAME_% (PRIMARY) -->> %_OUT_SQL_%
  54. echo EXEC sp_attach_db @dbname = '%_DB_NAME_%'>> %_OUT_SQL_%
  55. echo   ,@filename1 = '%~dpnx1'>> %_OUT_SQL_%
  56. echo   ,@filename2 = '%~dpn1_log.ldf'>> %_OUT_SQL_%
  57. goto END
  58. rem -----------------------------------
  59. :_SECONDARY
  60. set _DB_NAME_=%_DB_PREFIX_N_%
  61. set _DB_PREFIX_=%_DB_PATH_%\%_DB_NAME_%
  62. echo.>> %_OUT_SQL_%
  63. echo -- %_DB_NAME_% (SECONDARY) -->> %_OUT_SQL_%
  64. echo EXEC sp_attach_db @dbname = '%_DB_NAME_%'>> %_OUT_SQL_%
  65. echo   ,@filename1 = '%_DB_PREFIX_%1.mdf'>> %_OUT_SQL_%
  66. for /L %%a in (2 1 16) do (
  67.     if exist %_DB_PREFIX_%%%a.ndf (
  68.         echo   ,@filename%%a = '%_DB_PREFIX_%%%a.ndf'>> %_OUT_SQL_%
  69.     ) else (
  70.         echo   ,@filename%%a = '%_DB_PREFIX_%_log.ldf'>> %_OUT_SQL_%
  71.         goto END
  72.     )
  73. )
  74.  
  75. :END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement