您的位置:首页 > 数据库

跨数据库服务器执行sql语句

2009-06-08 22:11 441 查看
在某些场合中。需要涉及到跨数据库服务器的两个数据库实例间进行数据操作,在这种场合下,可以使用sp_addlinkedserver和sp_addlinkedsrvlogin这两个SQL SERVER自带的存储过程在某一台SQL SERVER数据库服务器上建立链接服务器。建立好链接服务器,对另一个SQL SERVER的操作就和操作本地数据库一样,待使用完后,用存储过程sp_dropserver释放链接服务器即可。

1. 建立链接服务器和登录链接服务器。

/// <summary>

/// 建立和登录链接服务器

/// </summary>

private static void CreateLinkedServer()

{

string server = "数据库服务器主机名";

string user = "登录数据库用用户名";

string pwd = "登录数据库用密码";

//建立链接服务器

IParam[] paras = new DBParam[4];

for (int i = 0; i < paras.Length; i++)

{

paras[i] = new DBParam();

}

paras[0].ParameterName = "server";

paras[0].Value = "Stager";

paras[1].ParameterName = "srvproduct";

paras[1].Value = "";

paras[2].ParameterName = "provider";

paras[2].Value = "SQLOLEDB";

paras[3].ParameterName = "datasrc";

paras[3].Value = server;

string sql = @"sp_addlinkedserver";

mcmsDao.ExecuteNonCmd(sql, CommandType.StoredProcedure, paras);

//登录链接服务器

IParam[] paras2 = new DBParam[5];

for (int i = 0; i < paras2.Length; i++)

{

paras2[i] = new DBParam();

}

paras2[0].ParameterName = "rmtsrvname";

paras2[0].Value = "Stager";

paras2[1].ParameterName = "useself";

paras2[1].Value = "false";

paras2[2].ParameterName = "locallogin";

paras2[2].Value = null;

paras2[3].ParameterName = "rmtuser";

paras2[3].Value = user;

paras2[4].ParameterName = "rmtpassword";

paras2[4].Value = pwd;

string sql2 = @"sp_addlinkedsrvlogin";

mcmsDao.ExecuteNonCmd(sql2, CommandType.StoredProcedure, paras2);

}

2. 释放链接服务器。

/// <summary>

/// 删除链接服务器

/// </summary>

private static void DropLinkedServer()

{

//删除链接服务器

IParam[] paras = new DBParam[2];

for (int i = 0; i < paras.Length; i++)

{

paras[i] = new DBParam();

}

paras[0].ParameterName = "server";

paras[0].Value = "Stager";

paras[1].ParameterName = "droplogins";

paras[1].Value = "droplogins";

string sql = @"sp_dropserver";

mcmsDao.ExecuteNonCmd(sql, CommandType.StoredProcedure, paras);

}

3. 判断链接服务器是否存在

/// <summary>

/// 判断链接服务器是否存在

/// </summary>

/// <returns></returns>

private static bool HasLinkedServerExists()

{

string sql = "select * from master.dbo.sysservers where srvname = 'Stager'";

object num = mcmsDao.ExecuteScalar(sql, CommandType.Text);

if (num == null)

{

return false;

}

return true;

}

4. 使用方法。

insert into Stager.cmsdb.dbo.IncreasedChannelInfo(url)

select url from cmsposting where url is not null

上面的sql语句将数据库表cmsposting中满足条件的记录插入到链接服务器Stager的数据库实例cmsdb中的表IncreasedChannelInfo。

注:在建立链接服务器前需要判断链接服务器是否已经存在,如果已经存在,就直接操作就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐