Transact-SQL 参考  
sp_addumpdevice 
将备份设备添加到 Microsoft® SQL Server™。语法
sp_addumpdevice [ @devtype = ] 'device_type' ,
    [ @logicalname = ] 'logical_name' ,
    [ @physicalname = ] 'physical_name'
    [ , { [ @cntrltype = ] controller_type
            | [ @devstatus = ] 'device_status' 
        } 
    ]参数
[@devtype =] 'device_type',备份设备的类型,device_type 的数据类型为 varchar(20),没有默认设置,可以是下列值之一。值 描述 
disk 硬盘文件作为备份设备。 
pipe 命名管道。 
tape 由 Microsoft Windows NT® 支持的任何磁带设备。如果 device 是 tape,则其默认值为 noskip。 
[@logicalname =] 'logical_name'备份设备的逻辑名称,该逻辑名称用于 BACKUP 和 RESTORE 语句中,logical_name 的数据类型为 sysname,没有默认值,并且不能为 NULL。[@physicalname =] 'physical_name'备份设备的物理名称。物理名称必须遵照操作系统文件名称的规则或者网络设备的通用命名规则,并且必须包括完整的路径。physical_name 的数据类型为 nvarchar(260),没有默认值,并且不能为 NULL。当创建远程网络位置上的备份设备时,请确保在其下启动 SQL Server 的名称对远程的计算机有适当的写入能力。如果要添加磁带设备,那么该参数必须是 Windows NT® 指派给本地磁带设备的物理名称,例如 \\.\TAPE0(对于计算机中的第一个磁带设备)。磁带设备必须连接到服务器计算机上,不能远程使用。如果名称包含非字母数字的字符,请用引号将其引起来。 [@cntrltype =] controller_type当创建备份设备时,该参数并不是必需的。为脚本提供该参数比较合适,然而 SQL Server 会将其忽略。controller_type 的数据类型为 smallint,默认值为 NULL,可以是下列值之一。值 描述 
2 当 device_type 为 disk 时使用。 
5 当 device_type 为 tape 时使用。 
6 当 device_type 为 pipe 时使用。 
[@devstatus =] 'device_status'指明是读取 (noskip) ANSI 磁带标签,还是忽略 (skip) 它。device_status 的数据类型为 varchar(40),默认值为 noskip。说明  可以指定 controller_type 或 device_status,但二者不要同时指定。 
返回代码值
0(成功)或 1(失败)结果集
无注释
sp_addumpdevice 将备份设备添加到 master.dbo.sysdevices 表。可以在 BACKUP 和 RESTORE 语句中对其进行逻辑引用。 所有关系和权限问题可能干扰磁盘或文件备份设备的使用。请确保对在其下启动 SQL Server 的帐户给予适当的文件权限。SQL Server 支持将磁带备份到 Windows NT 支持的磁带设备上。有关 Windows NT 支持的磁带设备的更多信息,请参见 Windows NT 的硬件兼容性列表。若要查看计算机上可用的磁带设备,请使用 SQL Server 企业管理器。对于特定的磁带驱动器,只应使用推荐的磁带(按驱动器厂商的建议)。若要使用 DAT 驱动器,请使用计算机级的 DAT 磁带 (Digital Data Storage-DDS)。 不能在事务内执行 sp_addumpdevice。权限
只有 sysadmin 和 diskadmin 固定服务器角色的成员才能执行该过程。示例
A. 添加磁盘转储设备
下面的示例添加一个名为 MYDISKDUMP 的磁盘备份设备,其物理名称为 C:\Dump\Dump1.bak。USE master
EXEC sp_addumpdevice 'disk', 'mydiskdump', 'c:\dump\dump1.bak'B. 添加网络磁盘备份设备
下面的示例显示一个远程磁盘备份设备。在其下启动 SQL Server 的名称必须对该远程文件拥有权限。USE master
EXEC sp_addumpdevice 'disk', 'networkdevice',
   '\\servername\sharename\path\filename.ext'C. 添加磁带备份设备
下面的示例添加 TAPEDUMP1 设备,其物理名称为 \\.\Tape0。USE master
EXEC sp_addumpdevice 'tape', 'tapedump1',
   '\\.\tape0'
请参见BACKUPRESTOREsp_dropdevicesp_helpdevice系统存储过程©1988-2000 Microsoft Corporation。保留所有权利。

解决方案 »

  1.   

    create   PROCEDURE  GY_DBBak  
              @bakequip    int,         --  备份设备:磁盘&磁带  
              @bakpath     varchar(50), --  带全路径的备份文件名  
              @baktype     int,         --  完全备份&增量备份  
              @baklog      int,         --  ‘0’备份日志  
              @bakdb       int,         --  ‘0’备份数据库  
              @kind  varchar(7),        --备份还是恢复  
              
      @retmsg  varchar(20)  output     --返回信息  
    AS  
       DECLARE  @DevName_data    varchar(50)  
       DECLARE  @DevName_log   varchar(50)
       declare @db_path varchar(100)
       declare @log_path varchar(100)
           
       DECLARE  @RC INT     SELECT    @db_path    =  @bakpath    +  '.dat'  
    SELECT    @log_path   =  @bakpath    +  'log.dat'  
            SELECT    @RC=0
            select  @DevName_data='dali',@DevName_log='dalilog'   DBCC  CHECKDB(数据库名)  
    /***********************************************************
    ** CREATE BACKUP AND RESTORE DEVICES
    ************************************************************/
    IF @RC=0
       BEGIN

        EXEC sp_addumpdevice 'disk', @DevName_data,@db_path

    exec sp_addumpdevice 'disk', @DevName_log,@log_path
        select @rc=@@error
    IF @RC<>0
    begin
    EXEC SP_DropDevice @Devname_data
    exec sp_dropdevice @devname_log
    SELECT @RC=-1000
    return @rc
    end
      END

       IF  @kind='backup'  
       BEGIN  
           IF  @bakequip=0  
           BEGIN  
               IF  @baktype=0  
               BEGIN  
                   IF  @bakdb=0  
                   BEGIN    
                       BACKUP  DATABASE  数据库名  TO  DISK=@Devname_data   
                       WITH  INIT  
                   END  
                   IF  @baklog=0  
                   BEGIN              
                       BACKUP  LOG  数据库名  WITH  NO_LOG              
                       BACKUP  LOG  数据库名  TO  DISK=@DevName_log 
                       WITH  INIT,NO_TRUNCATE  
                   END  
               END  
               ELSE  BEGIN  
                   IF  @bakdb=0  
                   BEGIN  
                       BACKUP  DATABASE  数据库名  TO  DISK=@DevName_data
                       WITH  NOINIT  
                   END  
                   IF  @baklog=0  
                   BEGIN  
                       BACKUP  LOG  数据库名  WITH  NO_LOG              
                       BACKUP  LOG  数据库名  TO  DISK=@DevName_log 
                       WITH  NOINIT,NO_TRUNCATE  
                   END  
               END          
           END  
           SELECT  @retmsg='数据库备份成功!'  
       END  
     
       IF  @kind='restore'      
       BEGIN  
           RESTORE  DATABASE  数据库名  FROM  DISK=  @DevName_data WITH  REPLACE  
           SELECT  @retmsg='恢复数据库成功!'  
       END   EXEC SP_DropDevice @Devname_data
    exec sp_dropdevice @devname_log
     
       RETURN  0---测试:
    declare @ varchar(100)
    exec gy_dbbak 0,'aa',0,0,0,'backup',@ output
    select @