| 
                          代码如下: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
                          (编辑:莱芜站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |