SQL Server跨服务器查询、新增、更新数据
链接其他服务器,在本sqlserver 中创建作业执行 作业自动同步数据
exec sp_addlinkedserver
@server='wxmjDB', --链接服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='192.168.88.111' --要访问的的数据库所在的服务器的ip
GO
EXEC sp_addlinkedsrvlogin
'wxmjDB', --链接服务器别名
'false',
NULL,
'sa', --要访问的数据库的用户
'sa' --要访问的数据库,用户的密码
--查询
1.select * from wxmjDB.数据库名.dbo.表名
2.select * from wxmjDB.SKEP_DAS.dbo.DAS_ChangeStaff
--新增
1.insert openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)
2.insert into wxmjDB.SKEP_DAS.dbo.DAS_ChangeStaff(staffID,StaffDisplayName,TenantID,StaffUserField8,StaffUserField9,
StaffUserField10,StaffUserField11,StaffState) select stuNum,stuName,'测试',buildingId,roomId,buildingName,roomName,0 from View_LivingMjdj
where not exists(select staffID from wxmjDB.SKEP_DAS.dbo.DAS_ChangeStaff where staffID=stuNum);
--更新
1.update b set b.列A=a.列A
from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
2.update das set
StaffUserField8=v.buildingId,
StaffUserField9=v.roomId,
StaffUserField10=v.buildingName,
StaffUserField11=v.roomName,
staffstate=v.statusCode from wxmjDB.SKEP_DAS.dbo.DAS_ChangeStaff das
inner join View_LivingMjdj as v on ( das.staffID=v.stuNum )
where (das.StaffUserField8<>v.buildingId or das.StaffUserField9<>v.roomId or
das.StaffUserField10<>v.buildingName or das.StaffUserField11<>v.roomName or das.staffstate<>v.statusCode )
--创建作业
--脚本创建作业
use master
GO
--定义创建作业
DECLARE @jobid uniqueidentifier, @jobname sysname
SET @jobname = N'测试162'
IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name=@jobname)
EXEC msdb.dbo.sp_delete_job @job_name=@jobname
EXEC msdb.dbo.sp_add_job
@job_name = @jobname,
@job_id = @jobid OUTPUT
--定义作业步骤
DECLARE @sql nvarchar(4000),@dbname sysname
SELECT @dbname=DB_NAME(), --作业步骤在当前数据库中执行
@sql=N'--作业步骤内容' --一般定义的是使用TSQL处理的作业,这里定义要执行的Transact-SQL语句
EXEC msdb.dbo.sp_add_jobstep
@job_id = @jobid,
@step_name = N'步骤一',
@subsystem = 'TSQL', --步骤的类型,一般为TSQL
@database_name=@dbname,
@command = @sql
--创建调度(使用后面专门定义的几种作业调度模板)
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N'第一个调度',
@freq_type=8, --执行的频率 周
@freq_interval=4, --在星期二执行
@freq_subday_type=0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次。0x1和@active_start_time一起使用,@active_start_time指定开始执行的时间,代表在@freq_type指定的频率间隔内只执行一次
--若是0x4或0x8,只要指定@freq_subday_interval, @freq_subday_interval代表每多少分钟(当@freq_subday_type=0x4)或小时(当@freq_subday_type=0x8)执行的次数
@freq_subday_interval=2, --重复周期数,这里每小时执行一次
@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD
@active_start_time = 020000, --作业执行的开始时间,格式为HHMMSS
@active_end_time = 030000, --作业执行的停止时间,格式为HHMMSS
@freq_recurrence_factor = 2 --执行间隔 两周
--手动创建作业
1.点开 SQL Server 代理,作业右键 新建作业
2.点击步骤 选择要执行作业的数据库 命令里面执行存储过程
3.设置想何时执行的存储过程
4. 成功