使用bat脚本进行数据库操作

一、为什么要使用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 * from ITSV.数据库名.dbo.表名 
10 
11 --导入示例 
12 select * intofrom ITSV.数据库名.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 * intofrom openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
25 
26 --把本地表导入远程表 
27 insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
28 select *from 本地表 
29 
30 --更新本地表 
31 update b 
32 set b.列A=a.列A 
33  from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b 
34 on a.column1=b.column1 
35 
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 update b 
48 set b.列B=a.列B 
49 FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  
50 inner join 本地表 b on a.列A=b.列A 
51 
52 --3、opendatasource/openrowset 
53 SELECT   * 
54 FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 
55 --把本地表导入远程表 

  insert into 机器B别名.数据库.dbo.表(字段1,。。。。。。)
  select top(3000) 字段,。。。 from 机器A别名.数据库.dbo.表 

参考:

1. SQL数据库数据定时推送到远程MYSQL数据库中去

2. SQL Server自动备份 备份到本地或者远程服务器

posted @ 2019-12-15 11:51  傍风无意  阅读(2437)  评论(0)    收藏  举报