SQL Server链接服务器使用简介

最近由于项目正式部署,需要将旧db信息的某些表数据同步到新的db表中。都是SQL Server数据库完全可以使用SQL Server的导入功能,但是在大数据量的情况下使用导入功能可能会比较慢,所以尝试了一下使用链接服务器+存储过程的方法导入数据,效果不错,十万的数据量10秒内就顺利导入了,简单分享下链接服务器的使用方法。

 

1.  在新的数据库服务器上新建一个链接服务器,步骤:服务器对象——链接服务器——右键 新建链接服务器

在窗口中输入链接服务器的名称和数据源,切换到安全性,设置一下远程登录名和密码。

建好之后最好测试一下服务器的连通性。如下如所示:

 

2.   链接服务器建立好之后我们就可以在左边的导航栏看到远程数据库的所有信息了,包括表,视图,存储过程等等。我们也可以很方便的操纵他们。

3.  下面我在新服务器上建立一个专门用来同步数据的存储过程,最主要的就是要看好如何去访问链接服务器的表或视图。在这里我访问的是视图V_GetH3HRData。代码如下所示:

USE [H3]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:Ben.Jiang
-- Create date:2012/3/15
-- Description:从中间库获取HR数据导入H3
-- =============================================
ALTER PROCEDURE [dbo].[SP_GetHRDataFromZNMIDDB]
AS
BEGIN
    --设置公司ID
	DECLARE @CompanyID NVARCHAR(40);
	SET @CompanyID=(SELECT ObjectID FROM OT_Company);
	--导入用户表
	--删除旧数据
	DELETE FROM dbo.OT_User WHERE Admin=0;
	--插入新数据
	INSERT INTO dbo.OT_User([ObjectID],[Alias],[Name],[ParentID],[ManagerID],[Email]
           ,[Mobile],[OfficePhone],[Country],[Province],[City],[State],[EntryDate]
           ,[DepartureDate],[CreatedTime],[ModifiedTime],[Birthday],[Admin])
    SELECT [ID],[USERNAME] ,[name] ,[orgid],[Directorid],[mailbox] ,[mobilephone],[telphone]
      ,[nation],[Province] ,[CITY] ,[status],[joindutydate],
    [joinunitdate],[Createdate],[ModifiedTime],[solarbirthday],'0'
      FROM [ZN_MIDDB].[ZNMIDLIB].[dbo].[V_GetH3HRData];
    --设置默认值 公司ID 密码等
    UPDATE dbo.OT_User SET Password='000000',ServiceState=0,TitleID=null,Price=0,DesicionWeight=0,PrivacyLevel=0,
  Notification=65535,Visibility=3,SpsTaskCustom=0,SortKey=0,ParentIndex=0,CompanyID=@CompanyID
   WHERE Admin=0;
	
	--导入组织部门表
	DELETE FROM dbo.OT_OrganizationUnit;
	INSERT INTO dbo.OT_OrganizationUnit(ObjectID,Name,Code,ParentID,ManagerID,SortKey,CreatedTime)
    SELECT lOWER(UNITID) AS UNITID,SHORTNAME,lOWER(CODE) as code,lOWER(Parentid) AS Parentid,lOWER(Directorid) AS Directorid,
    SORTNO,CAST((CASE WHEN isdate(Founddate) = 1 THEN Founddate ELSE NULL END) AS datetime) AS Founddate
    FROM [ZN_MIDDB].[ZNMIDLIB].[dbo].T_SYN_ORG;
    UPDATE  dbo.OT_OrganizationUnit SET 
    CompanyID=@CompanyID,Admin=0,Visibility=1,State=0,SpsTaskCustom=0,ParentIndex=0;
    
	--导入职位表
	DELETE FROM [dbo].[OT_Title];
	INSERT INTO [dbo].[OT_Title](ObjectID,Name,ParentObjectID)
    SELECT Lower(id) as ID,NAME,Lower(P_orgid) as P_orgid
    FROM [ZN_MIDDB].[ZNMIDLIB].[dbo].T_SYN_POSITION;
    UPDATE  [dbo].[OT_Title] SET CompanyID=@CompanyID;
    
    --更新组织表的ParentID为CompanyID
    UPDATE  [dbo].[OT_OrganizationUnit] SET ParentID=@CompanyID where ParentID='0'
END

4.   执行存储过程,导入数据,可以看到速度很快。   

展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值