天天看点

在sql server里连接远程服务器,并进行创建和删除新数据库

在sql server里连接远程服务器,并进行创建和删除新数据库

一、创建新库

-----------------------创建存储过程开始--------------------

if object_id('p_CreateDB') is not null

drop procedure p_CreateDB

go

CREATE PROCEDURE p_CreateDB  

@Des_DB sysname, --目标数据库

@ServerName sysname=N'', --服务器名

@UserName sysname=N'', --用户名,不指定则表示使用 Windows 身份登录

@pwd sysname=N'' --密码 

AS

SET NOCOUNT ON

DECLARE @srvid int,--服务器的对象

 @dbsid int,

 @Dbid int,--新建数据库对象

 @DBFile int,--新建数据库DB文件

 @LogFile int,--新建数据库Log文件

 @CmdStr nvarchar(4000)

declare @err int,@src varchar(255), @desc varchar(255) --错误处理变量

IF ISNULL(@ServerName,N'')=N'' SET @[email protected]@ServerName --默认为本地数据库

--创建sqldmo对象·

EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT

IF @err<>0 GOTO lb_Err

--连接服务器

IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录

BEGIN

  EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1

  IF @err<>0 GOTO lb_Err

  EXEC @err=sp_oamethod @srvid,'connect',NULL,@ServerName

END

ELSE

  EXEC @err=sp_oamethod @srvid,'connect',NULL,@ServerName,@UserName,@pwd

IF @err<>0 GOTO lb_Err

--新数据库对象创建

EXEC @err=sp_oacreate 'SQLDMO.Database',@Dbid OUT

IF @err<>0 GOTO lb_Err

EXEC @err=sp_oasetproperty @Dbid, 'Name',@Des_DB

IF @err<>0 GOTO lb_Err

--在服务器上创建 新数据库

EXEC @err = sp_OAMethod @srvid,'Databases.Add',null,@dbid

IF @err<>0 GOTO lb_Err

--结束

SET @err=0

GOTO lb_Exit

--错误处理

lb_Err:

  EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT 

  EXEC sp_OADestroy @LogFile

  EXEC sp_OADestroy @DBFile

  EXEC sp_OADestroy @Dbsid

  EXEC sp_OADestroy @Dbid 

  EXEC sp_OADestroy @srvid

  EXEC @err=sp_oamethod @srvid,'DisConnect'

  RAISERROR(N'错误编号 %#x, 错误源 "%s", 错误描述 "%s"',16,1,@err,@src,@desc)

  RETURN -1

lb_Exit:

  EXEC sp_OADestroy @LogFile

  EXEC sp_OADestroy @DBFile

  EXEC sp_OADestroy @Dbsid

  EXEC sp_OADestroy @Dbid 

  EXEC sp_OADestroy @srvid 

  EXEC @err=sp_oamethod @srvid,'DisConnect'

  RETURN @err

GO

二、删除数据库

if object_id('p_DropDB') is not null

drop procedure p_DropDB

go

CREATE PROCEDURE p_DropDB  

@Des_DB sysname, --目标数据库

@ServerName sysname=N'', --服务器名

@UserName sysname=N'', --用户名,不指定则表示使用 Windows 身份登录

@pwd sysname=N'' --密码 

AS

SET NOCOUNT ON

DECLARE @srvid int,--服务器的对象

 @dbsid int,

 @Dbid int,--数据库对象

 @CmdStr nvarchar(4000)

declare @err int,@src varchar(255), @desc varchar(255) --错误处理变量

IF ISNULL(@ServerName,N'')=N'' SET @[email protected]@ServerName --默认为本地数据库

--创建sqldmo对象·

EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT

IF @err<>0 GOTO lb_Err

--连接服务器

IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录

BEGIN

  EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1

  IF @err<>0 GOTO lb_Err

  EXEC @err=sp_oamethod @srvid,'connect',NULL,@ServerName

END

ELSE

  EXEC @err=sp_oamethod @srvid,'connect',NULL,@ServerName,@UserName,@pwd

IF @err<>0 GOTO lb_Err

--删除数据库

--这两个都可以删除

EXEC @err = sp_OAMethod @srvid,'KillDatabase',null,@Des_DB

IF @err<>0 GOTO lb_Err

--结束

SET @err=0

GOTO lb_Exit

--错误处理

lb_Err:

  EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT 

  EXEC sp_OADestroy @Dbsid

  EXEC sp_OADestroy @Dbid 

  EXEC sp_OADestroy @srvid

  EXEC @err=sp_oamethod @srvid,'DisConnect'

  RAISERROR(N'错误编号 %#x, 错误源 "%s", 错误描述 "%s"',16,1,@err,@src,@desc)

  RETURN -1

lb_Exit:

  EXEC sp_OADestroy @Dbsid

  EXEC sp_OADestroy @Dbid 

  EXEC sp_OADestroy @srvid 

  EXEC @err=sp_oamethod @srvid,'DisConnect'

  RETURN @err

GO

--更多功能 可以 参考联机丛书