• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    sqlserver数据库移动数据库路径的脚本示例

    复制代码 代码如下:

    USE master
    GO

    DECLARE
        @DBName sysname,
        @DestPath varchar(256)
    DECLARE @DB table(
        name sysname,
        physical_name sysname)


    BEGIN TRY

    SELECT
        @DBName = 'TargetDatabaseName',   --input database name
        @DestPath = 'D:\SqlData\'         --input destination path


    -- kill database processes
    DECLARE @SPID varchar(20)
    DECLARE curProcess CURSOR FOR

    SELECT spid
    FROM sys.sysprocesses
    WHERE DB_NAME(dbid) = @DBName

    OPEN curProcess
        FETCH NEXT FROM curProcess INTO @SPID
        WHILE @@FETCH_STATUS = 0
        BEGIN
                EXEC('KILL ' + @SPID)
                FETCH NEXT FROM curProcess
        END
    CLOSE curProcess
    DEALLOCATE curProcess

    -- query physical name
    INSERT @DB(
        name,
        physical_name)
    SELECT
        A.name,
        A.physical_name
    FROM sys.master_files A
    INNER JOIN sys.databases B
        ON A.database_id = B.database_id
            AND B.name = @DBName
    WHERE A.type =1

    --set offline
    EXEC('ALTER DATABASE ' + @DBName + ' SET OFFLINE')

    --move to dest path
    DECLARE
        @login_name sysname,
        @physical_name sysname,
        @temp_name varchar(256)
    DECLARE curMove CURSOR FOR
    SELECT
        name,
        physical_name
    FROM @DB
    OPEN curMove
        FETCH NEXT FROM curMove INTO @login_name,@physical_name
            WHILE @@FETCH_STATUS = 0
            BEGIN
                SET @temp_name = RIGHT(@physical_name,CHARINDEX('\',REVERSE(@physical_name)) - 1)
                EXEC('exec xp_cmdshell ''move "' + @physical_name + '" "' + @DestPath + '"''')
                EXEC('ALTER DATABASE ' + @DBName + ' MODIFY FILE ( NAME = ' + @login_name
                        + ', FILENAME = ''' + @DestPath + @temp_name + ''')')
                FETCH NEXT FROM curMove INTO @login_name,@physical_name
            END
    CLOSE curMove
    DEALLOCATE curMove

    -- set online
    EXEC('ALTER DATABASE ' + @DBName + ' SET ONLINE')

    -- show result
    SELECT
        A.name,
        A.physical_name
    FROM sys.master_files A
    INNER JOIN sys.databases B
        ON A.database_id = B.database_id
            AND B.name = @DBName
    END TRY
    BEGIN CATCH
        SELECT ERROR_MESSAGE() AS ErrorMessage
    END CATCH
    GO

    您可能感兴趣的文章:
    • SQLSERVER数据库升级脚本图文步骤
    • sqlserver数据库大型应用解决方案经验总结
    • 将ACCESS数据库迁移到SQLSERVER数据库两种方法(图文详解)
    • SQLSERVER数据库备份后无法还原的解决办法
    • sqlserver数据库出现置疑的解决思路
    • SQLSERVER数据库中的5173错误解决方法
    • 将备份的SQLServer数据库转换为SQLite数据库操作方法
    • sqlserver数据库主键的生成方式小结(sqlserver,mysql)
    • 重命名SQLServer数据库的方法
    • 自动定时备份sqlserver数据库的方法
    • sqlserver数据库导入数据操作详解(图)
    上一篇:命令行启动mssqlserver服务的方法示例
    下一篇:SqlServer中用exec处理sql字符串中含有变量的小例子
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    sqlserver数据库移动数据库路径的脚本示例 sqlserver,数据库,移动,路径,