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

在某些场合中。需要涉及到跨数据库服务器的两个数据库实例间进行数据操作,在这种场合下,可以使用sp_addlinkedserversp_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

 

注:在建立链接服务器前需要判断链接服务器是否已经存在,如果已经存在,就直接操作就可以了。

 

转载于:https://www.cnblogs.com/zky123/archive/2009/06/08/1499164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值