遍歷資料夾還原資料庫SQL語句
/***** 遍歷資料夾進行資料庫還原 *******/ ---需要開啟xp_cmdshell 如已經開啟 可以略過 /***** Step 1 開啟 xp_cmdshell Use Master GO EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE GO EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE WITH OVERRIDE GO *******/ IF OBJECT_ID('tempdb..#files') IS NULL BEGIN --DROP TABLE #files CREATE TABLE #files ( dbname VARCHAR(200) NULL, dbsql VARCHAR(7000) NULL ) END DELETE #files IF OBJECT_ID('tempdb..#filelistinfo') IS NOT NULL DROP TABLE #filelistinfo CREATE TABLE #filelistinfo ( LogicalName NVARCHAR(128) NULL, PhysicalName NVARCHAR(260) NULL, TYPE CHAR(1) NULL, FileGroupName NVARCHAR(128) NULL, FileSize BIGINT NULL, MAXSIZE BIGINT NULL, FileId BIGINT, CreateLSN NUMERIC(25, 0), DropLSN NUMERIC(25, 0) NULL, UniqueID UNIQUEIDENTIFIER, ReadOnlyLSN NUMERIC(25, 0) NULL, ReadWriteLSN NUMERIC(25, 0) NULL, BackupSizeInBytes BIGINT, SourceBlockSize INT, FileGroupID INT, LogGroupGUID UNIQUEIDENTIFIER NULL, DifferentialBaseLSN NUMERIC(25, 0) NULL, DifferentialBaseGUID UNIQUEIDENTIFIER, IsReadOnly BIT, IsPresent BIT, TDEThumbprint BIT ) DECLARE @path VARCHAR(500) DECLARE @pathData VARCHAR(500) DECLARE @sql VARCHAR(8000) DECLARE @bakName VARCHAR(500) DECLARE @LogicalNameDat VARCHAR(500) DECLARE @LogicalNameLog VARCHAR(500) DECLARE @tempCommand VARCHAR(800) SET @path = 'E:\DataBak' ---指定要處理的資料夾 SET @sql = 'dir ' + @path + ' /b' SET @pathData = 'D:\SqlDataBase' ----資料庫還原到的目錄 SET @bakName = '' -----統一的備份名稱(不要加.bak),比如固定日期或者可變名,根據自己的路徑規則定 --獲取檔名稱,存放在#files INSERT #files ( dbname ) EXEC MASTER..xp_cmdshell @sql --從#files表遍歷處理據庫數資訊,根據備份檔案獲取資料邏輯名稱 DECLARE @dbname VARCHAR(50) DECLARE curs CURSOR FOR --定義遊標curs SELECT dbname FROM #files OPEN curs FETCH NEXT FROM curs INTO @dbname WHILE @@fetch_status = 0 BEGIN SET @bakName = @dbname --根據自己的路徑規則來定 --根據自己路徑規則拼接資料庫備份檔案路徑,並執行RESTORE FILELISTONLY SET @tempCommand = 'restore filelistonly from disk=''' + @path + '\' + @dbname + '\' + @bakName + '.bak''' PRINT @tempCommand --將得到資料庫的資料存入臨時表#filelistinfo INSERT INTO #filelistinfo EXEC (@tempCommand) SELECT @LogicalNameDat = LogicalName FROM #filelistinfo WHERE [TYPE]= 'D' --資料庫檔案 SELECT @LogicalNameLog = LogicalName FROM #filelistinfo WHERE [TYPE]= 'L' --日誌檔案 --拼接恢復資料庫語句,並更新對應記錄到#files UPDATE #files SET dbsql = 'RESTORE DATABASE ' + dbname + ' FROM DISK = ''' + @path + '\' + dbname + '\' + @bakName + '.bak''' + ' WITH MOVE ''' + @LogicalNameDat + ''' TO ''' + @pathData + '\' + dbname + '.mdf'',' + ' MOVE ''' + @LogicalNameLog + ''' TO ''' + @pathData + '\' + dbname + '_log.ldf''' WHERE dbname = @dbname --清除#filelistinfo臨時表,繼續處理下一條記錄 DELETE FROM #filelistinfo FETCH NEXT FROM curs INTO @dbname END CLOSE curs DEALLOCATE curs SELECT * FROM #files --遍歷#files表 執行恢復 DECLARE cur CURSOR STATIC LOCAL FOR SELECT dbsql FROM #files OPEN cur WHILE 1 = 1 BEGIN FETCH cur INTO @sql IF @@fetch_status <> 0 BREAK EXEC (@sql) END DEALLOCATE cur DROP TABLE #files
操作原理:
遍歷備份檔案,將所有要還原的資料庫名稱存入#files
通過執行“RESTORE FILELISTONLY”,將結果存入##filelistinfo,從記錄中得到備份資料庫的庫檔案及日誌檔案的邏輯檔名,拼接“RESTORE DATABASE”,並對應更新存入#files表
遍歷#files表,執行恢復語句
本例 備份檔案儲存路徑參考:
相關推薦
遍歷資料夾還原資料庫SQL語句
/***** 遍歷資料夾進行資料庫還原 *******/ ---需要開啟xp_cmdshell 如已經開啟 可以略過 /***** Step 1 開啟 xp_cmdshell Use Master GO EXEC master.dbo.sp_configure '
AHK 遍歷資料夾下ahk檔案並執行與刪除
folder = D:\ver_upload\new Loop, %folder%\*.ahk FileList = %FileList%%A_LoopFileTimeModified%`t%A_LoopFileName%`n Sort, FileList ;根據日期排序.從小到大 Loo
c#遍歷資料夾獲得所有檔案
c#遍歷資料夾獲得所有檔案 在c#中,想要獲得一個資料夾下的所有子目錄以及檔案十分簡單。 首先,獲取目錄的情況下,DirectoryInfo.GetDirectories():獲取目錄(不包含子目錄)的子目錄,返回型別為DirectoryInfo[],支援萬用字元查詢; 其次,獲取檔案的
php遍歷資料夾所有檔案
function listFiles($dir) { $files = array(); $handle = opendir($dir); while ($file = readdir($handle)) { if (
遍歷資料夾內所有的CSV檔案,並且合併為同一個CSV
import pandas as pd import os ### 讀取檔案中的資料內容。 os.listdir(u"F:/公司/03_Study/01_爬蟲") Folder_Path = u"F:/公司/03_Study/01_爬蟲" # 要拼接的資料夾及其完整路徑,注意不要包含中文
Python 遍歷資料夾裡面的內容 5*
root_path='./result' sub_path=root_path+'./tmp' for root, dirs, files in os.walk(sub_path): for file in files: if os.path.splitext(file)[
Linux下遍歷資料夾
#include <dirent.h> #include <stdio.h> #include <stdlib.h> #include <string.h> char *dirname="/path/"; DIR *dirfile; dirfiles
php遍歷資料夾、檔案
php遍歷資料夾、檔案 <?php $path = '/'; foreach_file($path);//傳入需要遍歷的資料夾路徑 function foreach_file($path) { if(is_dir($path))//判斷目錄是否存在 {
【python高階程式設計】一、遍歷資料夾目錄
前言 如何遍歷查找出某個資料夾內所有的子檔案呢?並且找出某個字尾的所有檔案 walk功能簡介 1.os.walk() 方法用於通過在目錄樹種遊走輸出在目錄中的檔名,向上或者向下。 2.walk()方法語法格式如下: os.walk(top,topdown=True,onerr
OpenCV實現遍歷資料夾下所有檔案
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【筆記】window下 使用c++遍歷資料夾及其子資料夾和檔案,並列印檔案路徑及各檔案內容
這兩天一直在學習如何使用c++遍歷資料夾、讀取檔案內容和寫入檔案。 話不多說,直接上程式碼 /** 檔案功能:遞迴遍歷資料夾,遍歷資料夾及其子資料夾和檔案.列印資料夾名稱、檔名稱和檔案數目*** 參考:https://www.cnblogs.com/collectionne/p/679230
SPL遍歷資料夾
$root = 'D:/www/docroot';$iter = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS)
WIN32 C++ 遍歷資料夾
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C++遍歷資料夾下所有的wav檔案(支援windows和Linux)
直接上程式碼: #include <iostream> #include <string> #include <vector> #include <fstream> #include <string.h> #includ
一段批處理, 遍歷資料夾裡的csv檔案壓縮, 壓縮包的檔名是原始檔名的擷取
echo off SETLOCAL ENABLEDELAYEDEXPANSION set work_path=F:\somefolder F: cd %work_path% for /R %%s in (*.csv) do ( set fname=%%s echo !fname:~-30,
遍歷資料夾,讀取時間命名的檔案
平常用到的一些資料檔案,經常以時間命名,如“170128.csv”、“170328.csv”等,但是我們想分析一段時間的資料時就需要按照時間選取檔案,這時候按170128的數值直接加減並不合適,因為沒有170150這類的時間,因此需要按時間戳的加減來選擇,時間戳的形式一般為“1/6/17”、“17-
檔案目錄,遍歷資料夾檔案及屬性
目錄檔案: 1、建立目錄: 注:目錄需要執行的許可權,建立資料夾mode& ~umask &nbs
linux迴圈遍歷資料夾下所有檔案
demofun(){ for file in `ls $1` do if test -f $file then echo "file: $file" elif test -d $file then
[Xcode10 實際操作]七、檔案與資料-(4 )遍歷資料夾中的檔案
本文將演示如何遍歷資料夾下的內容。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override f
遞迴遍歷資料夾下所有檔案
遞迴遍歷資料夾下所有檔案 程式碼塊 遞迴遍歷資料夾下所有檔案 package com.chow; import java.io.File; import java.util.ArrayList; /** * Created by zhouhaiming on 20