一、为什么要使用bat脚本进行数据操作?
因为实际项目中,我们可能要对库中表的数据量进行定时统计或者数据进行定时备份,那么此时使用操作系统定时任务管理器,定时执行我们脚本中的任务就是最方便的选择。具体如何在定时任务设置参考博文。
二、如何使用
例子1:在.bat文件中调用.sql文件
A. 创建select.sql
connect to ksccs user ksccs using cvicse;
select count(*) from beps_wastebook2;
connect reset;
B. 创建db2_select.bat,内容如下:
@echo off
echo ###调用生成的文件操作数据库###
db2cmd db2 -tf "select.sql"
C.执行.bat
例子2:在.bat中执行sql:
A. 创建db2_called.bat
@echo off
echo ###直接用sql语句###
db2 connect to ksccs user ksccs using cvicse
db2 select count(*) from beps_wastebook1
db2 connect reset
pause
B. 创建db2_cw.bat
@echo off
db2cw db2_called.bat
pause
三、sql定时从一台机器抽取数据到另一台的数据库
最近出现数据交互太频繁,所以想减轻机器压力,想问下,什么方式比较高效的3000条数据从一台机器一次性复制到两外一台机器的sql表里呢? 而且是定时处理,大概1小时1次。可以使用SQL Server Agent中的Job,中文就是SQL代理里面的计划任务,把SQL贴上,然后设定RUN的时间间隔就好了。
1 --不同服务器之间的:
2 /*不同服务器数据库之间的数据操作*/
3
4 --创建链接服务器
5 exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址'
6 exec sp_addlinkedsrvlogin 'ITSV', 'false',null, '用户名', '密码'
7
8 --查询示例
9 select * fromITSV.数据库名.dbo.表名10
11 --导入示例
12 select * into 表 fromITSV.数据库名.dbo.表名13
14 --以后不再使用时删除链接服务器
15 exec sp_dropserver 'ITSV', 'droplogins'
16
17 --连接远程/局域网数据(openrowset/openquery/opendatasource)
18 --1、openrowset
19
20 --查询示例
21 select * from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)22
23 --生成本地表
24 select * into 表 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)25
26 --把本地表导入远程表
27 insert openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)28 select *from本地表29
30 --更新本地表
31 updateb32 set b.列A=a.列A33 from openrowset( 'SQLOLEDB', 'sql服务器名'; '用户名'; '密码',数据库名.dbo.表名)as a inner join本地表 b34 on a.column1=b.column135
36 --openquery用法需要创建一个连接
37
38 --首先创建一个连接创建链接服务器
39 exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址'
40 --查询
41 select *
42 FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')43 --把本地表导入远程表
44 insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')45 select * from本地表46 --更新本地表
47 updateb48 set b.列B=a.列B49 FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名') asa50 inner join 本地表 b on a.列A=b.列A51
52 --3、opendatasource/openrowset
53 SELECT *
54 FROM opendatasource( 'SQLOLEDB', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码').test.dbo.roy_ta55 --把本地表导入远程表
insert into 机器B别名.数据库.dbo.表(字段1,。。。。。。)
select top(3000) 字段,。。。 from 机器A别名.数据库.dbo.表
参考: