久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MS SQLServer如何批量附加數據庫

156次閱讀
沒有評論

共計 3801 個字符,預計需要花費 10 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章主要介紹了 MS SQLServer 如何批量附加數據庫,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

/************************************************************ 
 *  標題:MS SQLServer  批量附加數據庫  
 *  說明:請根據下面的注釋使用此腳本  
 *  時間: 2015/7/13 11:16:41 
 ************************************************************/ 
 USE MASTER 
GO 
 IF OBJECT_ID([sp_AttchDataBase] ) IS NOT NULL 
 DROP PROCEDURE [sp_AttchDataBase] GO 
 /* 附加數據庫(V2.0) Andy 2011-7-8 */ CREATE PROCEDURE sp_AttchDataBase( 
 @Path NVARCHAR(1024), 
 @DataFiles NVARCHAR(MAX) = NULL, 
 @SplitStr NVARCHAR(50) =  ,  ) 
AS 
 SET NOCOUNT ON 
 
 /* 
 V2.0  版本,在 V1.0 基礎上,處理文件路徑不規范原則,e.g. @DataFiles= E:\ my data DB \ Hello RT  
 
 @Path  文件路徑  
 @DataFiles  文件名列表  
 @SplitStr  文件名列表中的文件分隔符  
 
 1. 必須把要附加的數據庫文件 (*.mdf 和 *.ldf) 放到 @Path 下, 
 2. 當 @DataFiles Is Null  會附加 @Path 文件夾下的所有數據庫文件. 
 
 e.g: 
 Exec sp_AttchDataBase  D:\db2  
 */ 
 
 
 -- 檢查文件路徑是否正確  
 DECLARE @Dir NVARCHAR(1024), 
 @i INT, 
 @x XML 
 
 IF RIGHT(@Path, 1)    \  
 SET @Path = @Path +  \  
 
 IF CHARINDEX(\\ , @Path)   0 
 BEGIN 
 --RAISERROR 50001 N 文件路徑中不能包含有 \\ ,@Path 設置錯誤.  
 RETURN(1) 
 END 
 
 SET @Dir =  Dir   + @Path 
 EXEC @i = xp_cmdshell @Dir, 
 no_output 
 
 IF @i   0 
 BEGIN 
 --RAISERROR 50001 N 無效的文件路徑,@Path 設置錯誤.  
 RETURN(1) 
 END 
 
 SET @Path = REPLACE(@Path,  , ) /* 處理文件路徑不規范原則 */ 
 
 DECLARE @Files TABLE(NAME NVARCHAR(512)) 
 DECLARE @filetmpfin TABLE( 
 NAME NVARCHAR(255) NOT NULL, 
 depth INT NULL, 
 IsFile BIT NULL 
 ) 
 
 DECLARE @SmoPrimayChildren TABLE( 
 STATUS INT, 
 fileid INT, 
 NAME SYSNAME, 
 FILENAME NVARCHAR(512) 
 ) 
 
 DECLARE @smoPrimaryFileProp TABLE(PROPERTY SQL_VARIANT NULL, VALUE SQL_VARIANT NULL) 
 
 SET @DataFiles = REPLACE( 
 REPLACE(REPLACE(@DataFiles, CHAR(13) + CHAR(10),  ), CHAR(13),  ), 
 CHAR(10), 
   
 ) 
 
 SET @x = N Root File  + REPLACE(@DataFiles, @SplitStr, N /File File) + 
 N /File /Root  
 
 
 INSERT INTO @Files 
 SELECT t.v.value(.[1] ,  nvarchar(512) ) AS NAME 
 FROM @x.nodes(Root/File) t(v) 
 WHERE t.v.value(.[1] ,  nvarchar(512) )     
 
 
 INSERT INTO @filetmpfin 
 EXEC MASTER.dbo.xp_dirtree @Path, 
 1, 
 1 
 
 DECLARE @File NVARCHAR(255), 
 @sql NVARCHAR(4000), 
 @DataBase SYSNAME 
 
 
 
 DECLARE cur_File CURSOR 
 FOR 
 SELECT NAME 
 FROM @filetmpfin AS a 
 WHERE IsFile = 1 
 AND NAME LIKE  %.mdf  
 AND ( 
 EXISTS( 
 SELECT 1 
 FROM @Files 
 WHERE NAME = a.Name 
 ) 
 OR @DataFiles IS NULL 
 ) 
 AND NOT EXISTS( 
 SELECT 1 
 FROM MASTER.sys.master_files 
 WHERE physical_name = @Path + a.Name 
 ) 
 
 OPEN cur_File 
 
 BEGIN TRY 
 FETCH NEXT FROM cur_File INTO @File 
 WHILE @@Fetch_Status = 0 
 BEGIN 
 SET @sql =  dbcc checkprimaryfile (N  + @Path + @File +   , 2) With No_Infomsgs  
 
 INSERT INTO @smoPrimaryFileProp 
 EXEC (@sql) 
 
 SET @sql =  dbcc checkprimaryfile (N  + @Path + @File +   , 3) With No_Infomsgs  
 
 INSERT INTO @SmoPrimayChildren 
 EXEC (@sql) 
 
 SELECT @DataBase = QUOTENAME(CONVERT(NVARCHAR(255), VALUE)), 
 @sql = NULL 
 FROM @smoPrimaryFileProp 
 WHERE CONVERT(NVARCHAR(255), PROPERTY) =  Database name  
 
 SELECT @sql = ISNULL( 
 @sql +  ,  + CHAR(13) + CHAR(10), 
  Create DataBase   + @DataBase +   On  + CHAR(13) + CHAR(10) 
 ) + 
  (FileName=N  + @Path + RIGHT( 
 RTRIM(FILENAME), 
 CHARINDEX(\ , REVERSE(RTRIM(FILENAME))) -1 
 ) +  )  
 FROM @SmoPrimayChildren 
 
 EXEC (@sql +   For Attach) 
 
 PRINT N 成功附加數據庫:   + @DataBase 
 
 DELETE 
 FROM @SmoPrimayChildren 
 
 DELETE 
 FROM @smoPrimaryFileProp 
 
 FETCH NEXT FROM cur_File INTO @File 
 END 
 END TRY 
 BEGIN CATCH 
 DECLARE @Error NVARCHAR(2047) 
 SET @Error = ERROR_MESSAGE() 
 --RAISERROR 50001 @Error 
 END CATCH 
 
 
 CLOSE cur_File 
 DEALLOCATE cur_File 
GO 
 /************************************************************ 
 *  調用方式  
 ************************************************************/ --use master --Go 
 --Exec sp_AttchDataBase -- @Path =  E:\100. 其他 \ 測試 , -- nvarchar(1024) -- @DataFiles = NULL, -- nvarchar(max) -- @SplitStr = NULL -- nvarchar(50)

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“MS SQLServer 如何批量附加數據庫”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計3801字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 南澳县| 浏阳市| 遂平县| 江西省| 贡嘎县| 荥经县| 温宿县| 九江县| 铜山县| 景宁| 新宁县| 漳平市| 祁连县| 平阴县| 阿瓦提县| 美姑县| 隆德县| 喀喇| 调兵山市| 泽普县| 高尔夫| 临颍县| 加查县| 平乡县| 宝山区| 宜都市| 威信县| 凤庆县| 平武县| 蓬溪县| 定安县| 井研县| 临清市| 阿城市| 襄汾县| 深水埗区| 平顶山市| 金华市| 图木舒克市| 左贡县| 集贤县|