-- 最简单的方法, 让备份文件名循环就好了DECLARE @bkfile nvarchar(1000)
SET @bkfile = 'c:\bak\backup_' 
+ RTRIM(DATEDIFF(day, 0, GETDATE()) % 2) 
+ '_' + STUFF(CONVERT(char(5), GETDATE(), 108), 3, 1, '')
+ '.bak'
BACKUP DATABASE 库名 TO DISK = @bkfile
WITH DIFFERENTIAL, FORMAT

解决方案 »

  1.   

    文件名循环什么意思,
    那怎么删除CREATE proc p_backupdb
    @dbname sysname='',   --要备份的数据库名称,不指定则备份当前数据库
    @bkpath nvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
    @bkfname nvarchar(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
    @bktype nvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
    @appendfile bit=1   --追加/覆盖备份文件
    as
     declare @sql varchar(8000)
     if isnull(@dbname,'')='' set @dbname=db_name()
     if isnull(@bkpath,'')='' set @bkpath=dbo.f_getdbpath(null)
     if isnull(@bkfname,'')='' set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'
     set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)
      ,'\DATE\',convert(varchar,getdate(),112))
      ,'\TIME\',replace(convert(varchar,getdate(),108),':',''))
     set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
      +' to disk='''+@bkpath+@bkfname
      +''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
      +case @appendfile when 1 then 'NOINIT' else 'INIT' end
     print @sql
     exec(@sql)
    GO我是用这个方法备份的
      

  2.   

    不要用这个存储过程吧, 这个存储过程只是封装sql代码而已.你完全可以把我上面写的备份语句直接放入作业中.
      

  3.   

    我是通过作业备份的,
    可是我的问题是,怎么去删除这些备份的数据,如果通过数据哭维护计划 创建的数据库备份作业可以带删除多少前以前的数据,可是通过你这个作业备份,怎么带删除命令进去
    exec p_backupdb @dbname='xxxdata',@bkpath='F:\databak\xxxdata\'
    exec p_backupdb @dbname='xxxdata',@bkpath='F:\databak\xxxdata\',@bktype='DF'
      

  4.   

    MS SQLSERVER数据库开发提供:一、查看指定数据库对象 二、加密的存储过程、函数、触发器及视图都可以解密 三、自助提供表的查询、增、删、改的SQL语句 四、针对现有表记录生成初始数据脚本 五、针对表生成管理此表的存储过程。 六、SQL表结构及数据统计分析。 
        MS SQLSERVER数据库管理提供:一、SQL备份恢复(包括本地备份和远程备份)。 二、SQL与第三方数据格式(EXCEL,ACCESS,DBF,TXT,远程MS SQLSERVER)导入导出 三、SQL语句查询、查询结果报表打印、执行语句提交 四、SQL编程资料参考。CSDN下载:
    数据库开发助手(DBDevTools V4.5)
    http://down.csdn.net/kfgj/other/14512.html
      

  5.   

    zjcxc(邹建) ( ) 信誉:673  2006-06-28 20:47:00  得分: 0  
     
     
       在你的作业中, 再增加一个步骤, 这个步骤来完成删除, 这样, 把删除处理放在这个步骤中就行了.
      
     我就是希望你给我这个删除处理的操作代码,,
      

  6.   

    真是郁闷, 你用我写的自动处理的存储过程, 生成的文件名都是跟时间相关的, 而这个时间在什么时候, 又跟你设置的job的计划有关.你说我怎么写得出这个这个删除处理? 
    在作业中删除文件的方法, 不外乎两种:
    1. xp_cmdshell 'del xx文件'
    2. 作业的子系统使用cmdexec, 直接写 del 文件名 命令删除.而我之前是建议你不要用时间做文件名, 而是让生成的文件名自动循环, 相当于:
    文件名1
    文件名2
    ...
    文件名24  -- 到了这个文件名后, 下一个文件名又变成文件名1, 这样通过备份语句中设置format选项, 就可以覆盖最早生成的文件名1