我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MS SQLServer如何批量附加数据库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MS SQLServer如何批量附加数据库

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

  
  USE MASTER  
GO  
  IF OBJECT_ID('[sp_AttchDataBase]') IS NOT NULL  
    DROP PROCEDURE [sp_AttchDataBase]  GO  
    CREATE PROCEDURE sp_AttchDataBase(  
    @Path       NVARCHAR(1024),  
    @DataFiles  NVARCHAR(MAX) = NULL,  
    @SplitStr   NVARCHAR(50) = ','  )  
AS  
    SET NOCOUNT ON  
      
      
      
      
    --检查文件路径是否正确  
    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)

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MS SQLServer如何批量附加数据库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sqlserver附加数据库出错如何解决

在SQL Server中附加数据库时出现错误时,可以尝试以下解决方法:1. 确保数据库文件的完整性:检查数据库文件是否完整,没有被损坏或丢失。如果数据库文件被损坏,可以尝试使用备份文件替换损坏的文件。2. 检查数据库文件的权限:确保SQL
2023-09-22

sql数据库如何批量添加数据

要在SQL数据库中批量添加数据,可以使用INSERT INTO语句结合VALUES子句来一次性插入多条数据。以下是一个示例:INSERT INTO table_name (column1, column2, column3)VALUES
sql数据库如何批量添加数据
2024-04-10

sqlserver如何批量更新数据

在SQL Server中,可以使用以下方法批量更新数据:使用UPDATE语句和JOIN语句进行批量更新:UPDATE table1SET column1 = table2.column2FROM table1JOIN table2 O
sqlserver如何批量更新数据
2024-04-08

执行脚本附加sqlserver数据库.mdf 、.ldf

原文:https://www.cnblogs.com/wwzz/p/14505557.html
执行脚本附加sqlserver数据库.mdf 、.ldf
2016-01-28

sqlserver附加数据库报错怎么解决

SQL Server附加数据库时,可能会出现多种错误,例如数据库文件的路径不正确、数据库文件已经在使用中、数据库文件损坏等。以下是一些常见的解决方法:确保数据库文件的路径和名称正确:在附加数据库时,要确保指定的数据库文件路径和文件名是正确的
sqlserver附加数据库报错怎么解决
2024-04-13

sqlserver如何查询数据库数据量

要查询数据库中的数据量,可以使用以下SQL语句:SELECT COUNT(*) AS TotalRowsFROM YourTableName;其中,YourTableName是要查询的表名。这条SQL语句将返回表中的总行数。如果要查询特
sqlserver如何查询数据库数据量
2024-04-12

java如何批量添加数据

在Java中,可以使用循环结构来批量添加数据。首先,你需要创建一个数据容器,比如数组或集合,用于存储批量添加的数据。然后,使用循环结构(如for循环或while循环)来重复执行添加数据的操作。以下是一种简单的方法来批量添加数据的示例:```
2023-08-29

sqlserver附加数据库时出错怎么解决

当在SQL Server中尝试附加数据库时出现错误时,可以尝试以下解决方法:检查数据库文件是否存在:确保要附加的数据库文件(.mdf和.ldf文件)确实存在于指定的位置。确保文件路径正确:确保在附加数据库时指定了正确的文件路径。检查文件权限
sqlserver附加数据库时出错怎么解决
2024-04-17

sql如何附加数据库文件

在SQL中,可以使用以下语法附加数据库文件:CREATE DATABASE ON (FILENAME = '')FOR ATTACH;其中,是要创建的数据库的名称,是要附加的数据库文件的完整
sql如何附加数据库文件
2024-04-09

mysql数据库如何批量替换

这篇“mysql数据库如何批量替换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql数据库如何批量替换”文章吧。
2023-04-22

数据库批量迁移如何弄

数据库批量迁移通常有以下几种方法:1. 数据库备份和恢复:首先,在源数据库中进行备份操作,生成一个数据库备份文件。然后,在目标数据库中进行恢复操作,将备份文件导入到目标数据库中。这种方法适用于数据库之间的结构和数据完全相同的情况。2. 数据
2023-09-20

编程热搜

目录