• 使用存储过程备份SqlServer数据库


    存储过程代码如下所示:

    CREATE PROCEDURE [dbo].[SP_BackupDB]
    (
        @BackPath NVARCHAR(200),                    --备份路径,如:D:Backup
        @BackDbName NVARCHAR(50),                   --需要备份的数据库名称
        @BackName NVARCHAR(50)=@BackDbName OUTPUT,  --备份后的数据库名称,不需要.bak后缀。若不传,则等同于@BackDbName
        @BackPathIsDate BIT=1,                      --备份路径是否需要添加日期文件夹,默认添加
        @BackNameIsTime BIT=1                       --备份后的数据库名称是否需要追加当前时间,默认追加
    )
    AS
    BEGIN  
    
        IF(@BackPathIsDate=1)
            BEGIN
                SET @BackPath=@BackPath + CONVERT(VARCHAR, GETDATE(), 112) +'';
            END
    
        ---------------------------创建文件夹 Begin---------------------------
        DECLARE @FolderSQL NVARCHAR(MAX),
            @Return INT= 0;
      
        SET @FolderSQL = N'EXEC sp_configure ''show advanced options'',1 
        RECONFIGURE WITH OVERRIDE;
          
        EXEC sp_configure ''xp_cmdshell'',1 
        RECONFIGURE WITH OVERRIDE;
      
        EXEC @Return=xp_cmdshell ''mkdir ' + @BackPath
            + ''',NO_OUTPUT   --调用DOS命令创建文件夹;
      
        EXEC sp_configure ''xp_cmdshell'', 0 
        RECONFIGURE WITH OVERRIDE;
      
        EXEC sys.sp_configure N''show advanced options'', N''0''
        RECONFIGURE WITH OVERRIDE;
        ';  
        --PRINT @FolderSQL;  
    
        EXEC sp_executesql @FolderSQL, N'@Return INT OUTPUT', @Return OUTPUT;  
        --SELECT  @Return;   
    
        --PRINT @Return
        ---------------------------创建文件夹 End---------------------------
    
        ---------------------------备份数据库 Begin---------------------------
        DECLARE @NowTime VARCHAR(100);
        DECLARE @BackUpName VARCHAR(100);
    
        SET @NowTime=CONVERT(VARCHAR, GETDATE(), 112)+REPLACE(CONVERT(VARCHAR, GETDATE(), 108),':','');
    
        /*
        IF(LEN(@BackName)<=0)
            BEGIN
                SET @BackName=@BackDbName;
            END
        */
    
        IF(@BackNameIsTime=1)
            BEGIN
                SET @BackName=@BackName +'_'+ @NowTime;
            END
        SET @BackName=@BackName+'.bak';
    
        SET @BackUpName=@BackPath + @BackName;
    
        BACKUP DATABASE @BackDbName
        TO DISK=@BackUpName
        WITH INIT;
        ---------------------------备份数据库 End---------------------------
    
        SELECT @BackName BackName,@BackPath BackPath,@BackPath + @BackName FullBackName;
    
    END
    
    GO
  • 相关阅读:
    第五章 面向方面编程___通知类型
    从 C++ 到ObjectiveC
    iPhone/Mac ObjectiveC内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
    两个操作字符串的方法:读取指定位置的字符和找出某个字符串的位置
    SQLITE3使用总结
    iphone中如何进行多线程编程
    sqlite数据库在IOS中的运用
    重载、覆盖、隐藏
    (转)c/c++ 内存管理
    iPhone/Mac ObjectiveC内存管理教程和原理剖析(四)系统自动创建新的autorelease pool
  • 原文地址:https://www.cnblogs.com/qubernet/p/6229327.html
Copyright © 2020-2023  润新知