sp_attach_single_file_db
  新增信息 - 2001 年 9 月将只有一个数据文件的数据库附加到当前服务器。语法
sp_attach_single_file_db [ @dbname = ] 'dbname'
    , [ @physname = ] 'physical_name'参数
[@dbname =] 'dbname'要附加到服务器的数据库的名称。dbname 的数据类型为 sysname,默认值为 NULL。 [@physname =] 'phsyical_name'据库文件的物理名称,包括数路径。physical_name 的数据类型为 nvarchar(260),默认值为 NULL。返回代码值
0(成功)或 1(失败)结果集
无注释
当使用 sp_attach_single_file_db 将数据库附加到服务器时,它创建一个新的日志文件并执行额外的清除工作,从新附加的数据库中删除复制。仅对使用显式 sp_detach_db 操作从服务器分离的数据库执行 sp_attach_single_file_db。仅对具有单个日志文件的数据库使用 sp_attach_single_file_db。不要对具有多个日志文件的数据库使用此存储过程。权限
只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行本过程。示例
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs', 
   @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
请参见sp_attach_dbsp_detach_dbsp_helpfile系统存储过程

解决方案 »

  1.   

    sp_attach_single_file_db
    将只有一个数据文件的数据库附加到当前服务器。语法
    sp_attach_single_file_db [ @dbname = ] 'dbname'
        , [ @physname = ] 'physical_name'EXEC sp_attach_single_file_db @dbname = 'pubs', 
       @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
      

  2.   

    exec sp_attach_single_file_db @dbname = 'test1', @physname =  'D:\Test1_Data.MDF'路径和文件名自己改!
      

  3.   

    同意 hzm_8(☆) 的说法!
      

  4.   

    我也遇到了相同的问题,不过SQL SERVER2000的安装盘改变了,是否也能用hzm_8的方法,请问用哪一个向导呀,是“导入/导出向导”吗?
      

  5.   

    另外我使用一下方法将数据恢复了过来(只有数据库文件,没有日志文件),但数据处于紧急修复状态,无法将其修改为正常状态,因此重启时,数据库又处于置疑状态,请共同探讨一下
    Use Master
    Go
    sp_configure 'allow updates', 1
    reconfigure with override
    Go
    然后
    update sysdatabases set status = 32768 where name = '<db_name>'
    现在,重新建立一个log文件(我试过但无法成功,不知高手有何方法)。先把SQL Server 重新启动一下,然后检查你的数据库吧。
    先设置成单用户模式,然后做dbcc
    sp_dboption '<db_name>', 'single user', 'true'
    DBCC CHECKDB('<db_name>')
    把数据库状态改回去了,记得别忘了把系统表的修改选项关掉。
    update sysdatabases set status = 28 where name = '<db_name>' --当然你的数据库状态可能不是这个,自己改为合适的值吧。也可以用sp_resetstatus
    go
    sp_configure 'allow updates', 0
    reconfigure with override
    Go
      

  6.   

    向导如下:如何附加数据库(企业管理器)
    1、展开服务器组,然后展开服务器。
    2、右击"数据库",然后选择"所有任务"/"附加数据库"。
    3、输入要附加的数据库的 MDF(master 数据文件)名称。如果不确定文件位于何处,单击浏览("...")搜索。最多可以指定 16 个文件名。有关更多信息,请参阅 sp_attach_db。
    4、若要确保指定的 MDF 文件正确,请单击"验证"。"原文件名"列列出了数据库中的所有文件(数据文件和日志文件)。"当前文件位置"列列出了文件的名称和路径。如果 Microsoft? SQL Server? 找不到指定位置的文件,则附加操作将失败。可以对"当前文件位置"列进行编辑,并且文件的当前位置必须在该列中才能使附加操作得以进行。例如,如果在分离操作前改变了文件的默认位置,则必须指定当前位置才能使附加操作顺利进行。
    5、在"附加为"框内,输入数据库的名称。数据库名称不能与任何现有数据库名称相匹配。
    6、指定数据库的所有者。
    7、单击"确定"按钮。新附加的数据库的数据库节点即创建在"数据库"文件夹中。 
      

  7.   

    因为新建一个数据库,用旧的MDF文件覆盖新的MDF文件,新的ldf文件和旧的MDF文件不匹配,数据库会置疑,这时用sp_attach_single_file_db或sp_attach_db或在企业管理器中附加数据库都没有用了。只有将新的ldf文件改名或移走,再用sp_attach_single_file_db或sp_attach_db或在企业管理器中附加数据库就OK了。1、在查询分析器中执行:
    exec sp_detach_db 'DB_Name'
    2、在我的电脑中将日志的物理文件xxx_Log.LDF改名。
    3、在查询分析器中执行:
    exec sp_attach_single_file_db 'DB_Name','C:\Program Files\Microsoft SQL Server\MSSQL\Data\DB_Name.MDF'
    4、如果上一步成功,将步骤2中改名后的文件删除。
      

  8.   

    在foolishchao介绍的附加数据库的方法中,如果没有日志文件怎么办,是否还可以使用这种方法?
      

  9.   

    把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复: 
    EXEC sp_attach_db @dbname = 'test', 
    @filename1 = 'd:\mssql7\data\test_data.mdf', 
    @filename2 = 'd:\mssql7\data\test_log.ldf' 
    这样就把test数据库附加到SQL Server中,可以照常使用。
    如果不想用原来的日志文件,可以用如下的命令: 
    EXEC sp_detach_db @dbname = 'test' 
    EXEC sp_attach_single_file_db @dbname = 'test', 
    @physname = 'd:\mssql7\data\test_data.mdf' 
    这个语句的作用是仅仅加载数据文件,日志文件可以由SQL Server数据库自动添加,但是原来的日志文件中记录的数据就丢失了。