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

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

WBOY
WBOYOriginal
2016-06-07 17:47:171040Durchsuche

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

一、创建新库

/*
测试 在sql2005中通过查询分析器,连接到sql2000,并创建了 tmpdb 库:成功

p_CreateDB 'tmpdb1','data','sa','sa'

*/

-----------------------创建存储过程开始--------------------
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 @ServerName=@@ServerName --默认为本地数据库

--创建sqldmo对象·
EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT
IF @err0 GOTO lb_Err

--连接服务器
IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录
BEGIN
  EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1
  IF @err0 GOTO lb_Err

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

IF @err0 GOTO lb_Err
--新数据库对象创建
EXEC @err=sp_oacreate 'SQLDMO.Database',@Dbid OUT
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @Dbid, 'Name',@Des_DB
IF @err0 GOTO lb_Err
/*
---这里可以设置数据文件与日志文件的属性,不写就由sql server默认
--新数据库DB文件对象创建,并设置属性
EXEC @err=sp_oacreate 'SQLDMO.DBFile',@DBFile OUT
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'Name','tmpfile'
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'PhysicalName','c:tmp.mdf'
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'PrimaryFile','true'
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'FileGrowthType',0
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'FileGrowth',1
IF @err0 GOTO lb_Err
--新数据库对象加入DB文件
EXEC @err = sp_OAMethod @Dbid,'FileGrou.Item("primary").DBFiles.Add',null,@DBFile
IF @err0 GOTO lb_Err

--新数据库LOG文件对象创建,并设置属性
EXEC @err=sp_oacreate 'SQLDMO.LogFile',@LogFile OUT
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @LogFile, 'Name','tmplg'
IF @err0 GOTO lb_Err
EXEC @err=sp_oasetproperty @LogFile, 'PhysicalName','c:tmp.ldf'
--新数据库对象加入DB文件
EXEC @err = sp_OAMethod @Dbid,'TransactionLog.LogFiles.Add',null,@LogFile
IF @err0 GOTO lb_Err
*/
--在服务器上创建 新数据库
EXEC @err = sp_OAMethod @srvid,'Databases.Add',null,@dbid
IF @err0 GOTO lb_Err

/*
EXEC @err= sp_OAGetProperty @srvid, 'Databases', @dbsid OUT
IF @err0 GOTO lb_Err

SET @CmdStr = 'Add'
EXEC @err = sp_OAMethod @dbsid,@CmdStr,null,@dbid
*/


--结束
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

二、删除数据库

/*
测试

p_DropDB 'tmpdb1','data','sa','sa'
*/

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 @ServerName=@@ServerName --默认为本地数据库

--创建sqldmo对象·
EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT
IF @err0 GOTO lb_Err

--连接服务器
IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录
BEGIN
  EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1
  IF @err0 GOTO lb_Err

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

IF @err0 GOTO lb_Err

--删除数据库
--这两个都可以删除
EXEC @err = sp_OAMethod @srvid,'KillDatabase',null,@Des_DB
IF @err0 GOTO lb_Err
/*
--
EXEC @err = sp_OAMethod @srvid,'Databases.Remove',null,@Des_DB
IF @err0 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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn