跨数据库服务器执行sql语句
2009-06-08 22:11
495 查看
在某些场合中。需要涉及到跨数据库服务器的两个数据库实例间进行数据操作,在这种场合下,可以使用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。
注:在建立链接服务器前需要判断链接服务器是否已经存在,如果已经存在,就直接操作就可以了。
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。
注:在建立链接服务器前需要判断链接服务器是否已经存在,如果已经存在,就直接操作就可以了。
相关文章推荐
- sql语句跨服务器跨数据库执行
- 蛙蛙推荐:让你的sql语句跨服务器跨数据库跨表执行
- 实现sql语句跨服务器跨数据库跨表执行
- 使用sql语句建立与删除链接服务器及执行数据库操作
- 使用sql语句建立与删除链接服务器及执行数据库操作
- 让你的sql语句跨服务器跨数据库跨表执行
- sql语句跨服务器跨数据库执行
- sql语句跨服务器跨数据库执行
- 数据库总结--SQL语句执行顺序
- OpenCart网站后台执行数据库SQL语句功能插件
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- 数据库中可以执行的sql语句,在程序中执行抛出乱码异常
- 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷
- DotNet下开发MySQL-02 (数据库执行SQL语句)
- 用编程的方式将当前服务器上SQL SERVER中正执行的所有T-SQL语句记录下来
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- 附加数据库失败 执行Transact-SQL语句或批处理时发生了异常
- Entity Framework(EF) 直接执行数据库命令并返回 DataTable 数据参数化 SQL 语句
- MySQL存储过程详解 mysql 存储过程mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored
- MySQL数据库执行sql语句创建数据库和表提示The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working