千家信息网

MS SQLServer如何批量附加数据库

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍了MS SQLServer如何批量附加数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。/*************
千家信息网最后更新 2025年11月07日MS SQLServer如何批量附加数据库

这篇文章主要介绍了MS SQLServer如何批量附加数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

/************************************************************   * 标题: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'' + REPLACE(@DataFiles, @SplitStr, N'') +           N''                  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)

感谢你能够认真阅读完这篇文章,希望小编分享的"MS SQLServer如何批量附加数据库"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

文件 数据 数据库 附加 路径 篇文章 文件名 错误 处理 成功 价值 兴趣 分隔符 同时 基础 文件夹 方式 时间 更多 朋友 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术工程师技术方向 唐山企业管理软件开发团队 网络安全证书的作用 推进网络安全工作统筹协调 数据库娱乐指尖用 赛迪集团网络安全所蒲松涛 电子软件开发包括哪些 广州薇恩互联网科技有限公司 网络安全技术大作业高子天 单片机工程师要会数据库吗 决策支持系统 数据库 想学软件开发怎么入手 全国软件开发产品测试有多少人 网上购物平台数据库选择 软件开发理解客户需求 数据库恢复的主要原理 考研和软件开发哪个比较困难 网络安全实验设计方向 网络安全人才趋势报告 jbpm4.4 数据库 数据库查询id 网络技术和电商公司有什么区别 青岛存储服务器怎么收费 chrome香港服务器 青浦区市场软件开发业务流程 湖北省中小教育和网络安全 数据库概念模型一般用 服务器硬件维保有前途吗 网络安全监测和自查台帐 小度小度成熟日本樱花免费服务器
0