MS SQLServer 批量附加数据库

数据库 SQLServer 4549次浏览 root
/************************************************************
 * 标题:MS SQLServer 批量附加数据库
 * 说明:请根据脚本里的注释使用此脚本
 * 时间: 2015/7/13 11:16:41
 ************************************************************/
USE MASTER
GO
IF OBJECT_ID('[sp_AttchDataBase]') IS NOT NULL
    DROP PROCEDURE [sp_AttchDataBase]
GO
/*附加数据库(V2.0) Andy 2011-7-8 */
CREATE PROCEDURE sp_AttchDataBase(
    @Path       NVARCHAR(1024),
    @DataFiles  NVARCHAR(MAX) = NULL,
    @SplitStr   NVARCHAR(50) = ','
)
AS
SET NOCOUNT ON

/*
V2.0 版本,在V1.0基础上,处理文件路径不规范原則,e.g. @DataFiles='E:\"my data DB"\"Hello RT"'

@Path 文件路径
@DataFiles 文件名列表
@SplitStr 文件名列表中的文件分隔符

1.必须把要附加的数据库文件(*.mdf和*.ldf)放到@Path下,
2.当@DataFiles Is Null 会附加@Path文件夹下的所有数据库文件.

e.g:
Exec sp_AttchDataBase 'D:\SQL2005\DE2\'
*/


--检查文件路径是否正确
DECLARE @Dir  NVARCHAR(1024),
       @i    INT,
       @x    XML

IF RIGHT(@Path, 1) <> '\'
   SET @Path = @Path + '\'

IF CHARINDEX('\\', @Path) > 0
BEGIN
   RAISERROR 50001 N'文件路径中不能包含有"\\",@Path设置错误.'
   RETURN(1)
END

SET @Dir = 'Dir ' + @Path
EXEC @i = xp_cmdshell @Dir,
    no_output

IF @i <> 0
BEGIN
   RAISERROR 50001 N'无效的文件路径,@Path设置错误.'
   RETURN(1)
END

SET @Path = REPLACE(@Path, '"', '') /*处理文件路径不规范原則*/

DECLARE @Files               TABLE(NAME NVARCHAR(512))
DECLARE @filetmpfin          TABLE(
           NAME NVARCHAR(255) NOT NULL,
           depth INT NULL,
           IsFile BIT NULL
       )

DECLARE @SmoPrimayChildren   TABLE(
           STATUS INT,
           fileid INT,
           NAME SYSNAME,
           FILENAME NVARCHAR(512)
       )

DECLARE @smoPrimaryFileProp  TABLE(PROPERTY SQL_VARIANT NULL, VALUE SQL_VARIANT NULL)

SET @DataFiles = REPLACE(
       REPLACE(REPLACE(@DataFiles, CHAR(13) + CHAR(10), ''), CHAR(13), ''),
       CHAR(10),
       ''
   )

SET @x = N'<Root><File>' + REPLACE(@DataFiles, @SplitStr, N'</File><File>') + 
   N'</File></Root>'


INSERT INTO @Files
SELECT t.v.value('.[1]', 'nvarchar(512)') AS NAME
FROM   @x.nodes('Root/File') t(v)
WHERE  t.v.value('.[1]', 'nvarchar(512)') > ''


INSERT INTO @filetmpfin
EXEC MASTER.dbo.xp_dirtree @Path,

发表评论

电子邮件地址不会被公开。 必填项已用*标注