create PROCEDURE [dbo].[p_pm_项目平台客户批量同步到报销平台](@destserver nvarchar(50),@sourceserver nvarchar(50))ASBEGINSET NOCOUNT ON;--不存在则添加链接服务器,外部查询必须指明IP地址,例如 select * from [IP].[database].[dbo].[table]if not exists (select * from sys.servers where server_id!=0 and data_source=@destserver)beginexec sp_addlinkedserver@server=@destserverendif not exists (select * from sys.servers where server_id!=0 and data_source=@sourceserver)beginexec sp_addlinkedserver@server=@sourceserverendbegin try set xact_abort onbegin transaction INSERT INTO [192.168.0.10].[dbCRM].[dbo].[t_custom] (客户ID,客户名称,客户简称,输入码,查询码,地址,录入登录名,录入时间,修改登录名,修改时间,审批状态ID,审批状态名称,是否审批结束,审批操作时间,项目管理客商编码,序号)SELECT A.客户ID,A.客户名称,A.客户简称,dbo.fn_pm_GetPy(A.客户名称),A.客户编号+","+A.客户名称+","+dbo.fn_pm_GetPy(A.客户名称)+","+A.客户简称+","+dbo.fn_pm_GetPy(A.客户简称),A.地址,"admin",getdate(),null,null,"D65F87A8-79C8-4D1C-812D-AE4591E056A8","已审批",1,A.审批操作时间,A.项目管理客商编码,0FROM[dbPM].[dbo].[v_custom] AWHERE A.客户ID NOT IN ( SELECT 客户ID FROM[192.168.0.10].[dbCRM].[dbo].[t_custom]);----------------------------------存在更新-----------------------------------updateA set A.客户名称=B.客户名称,A.客户简称=B.客户简称,A.输入码=dbo.fn_pm_GetPy(B.客户名称),A.查询码=B.客户编号+","+B.客户名称+","+dbo.fn_pm_GetPy(B.客户名称)+","+B.客户简称+","+dbo.fn_pm_GetPy(B.客户简称),A.地址=B.地址,A.修改登录名="admin",A.修改时间=getdate(),A.项目管理客商编码 =B.项目管理客商编码from [192.168.0.10].[dbCRM].[dbo].[t_custom] A,[dbPM].[dbo].[v_custom] B where A.客户ID=B.客户ID;commit transaction end try begin catch select ERROR_NUMBER() as errornumber,ERROR_MESSAGE() as errormsg,ERROR_LINE() as errorlinerollback transaction end catchEND如果没有正确配置,经常会出现 消息 7391,级别 16,状态 2,过程 xxxxx,第 XX 行 。无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。
以上就是SQL Server 跨库同步数据的实现方法,希望对大家的学习有所帮助。