【问题标题】:Create database and move mdf files to SQL default location创建数据库并将 mdf 文件移动到 SQL 默认位置
【发布时间】:2014-03-06 05:48:01
【问题描述】:

我想从存在于临时位置的 .mdf 文件中创建一个 SQL 数据库,例如 C:\Temp

我正在使用以下查询

USE [master]
GO
CREATE DATABASE [database_name] ON 
( FILENAME = N'C:\temp\temp.mdf' ),
( FILENAME = N'C:\temp\temp.ldf' )
FOR ATTACH ;
GO

但我希望在附加时将 mdf 和 ldf 文件复制到 SQL 默认路径(C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\),因为将来可能会删除或更改临时位置。

我该怎么做?

【问题讨论】:

    标签: sql-server database ssms


    【解决方案1】:

    在附加之前,您需要将文件复制/移动到所需的目录中。 如果您希望它完全在 SQL 中完成,您需要:

    • 启用 xp_cmdshell
    • 执行如下脚本:

      USE [master]
      GO
      DECLARE @result int
      EXEC @result = xp_cmdshell 'copy c:\temp\temp.mdf
          C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.mdf';
      IF (@result = 0)
          EXEC @result = xp_cmdshell 'copy c:\temp\temp.ldf
              C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.ldf';
          IF (@result = 0)
              CREATE DATABASE [database_name] ON 
              (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.mdf'),
              (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.ldf')
              FOR ATTACH ;
              GO
          ELSE
              PRINT 'Failure'
      ELSE
          PRINT 'Failure'
      

    【讨论】:

      【解决方案2】:

      为避免因目录路径中的空格而出错,请使用双引号。

      USE [master]
      GO
      DECLARE @result int
      EXEC @result = xp_cmdshell 'copy "c:\temp\temp.mdf" "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.mdf"';
      
      IF (@result = 0)
      Begin
          EXEC @result = xp_cmdshell 'copy "c:\temp\temp.ldf" "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.ldf"';
          IF (@result = 0)
          Begin
              CREATE DATABASE [Your_Database_Name] ON 
              (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.mdf'),
              (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\temp.ldf')
              FOR ATTACH ;
          End
          ELSE
              PRINT 'Failure'
      End
      ELSE
          PRINT 'Failure'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多