A. 可以不可以 让sql 2008 每天自动执行一条语句
C:\Documents and Settings\Wang>osql /?
用法: osql [-U login id] [-P password]
[-S server] [-H hostname] [-E trusted connection]
[-d use database name] [-l login timeout] [-t query timeout]
[-h headers] [-s colseparator] [-w columnwidth]
[-a packetsize] [-e echo input] [-I Enable Quoted Identifiers]
[-L list servers] [-c cmdend] [-D ODBC DSN name]
[-q "cmdline query"] [-Q "cmdline query" and exit]
[-n remove numbering] [-m errorlevel]
[-r msgs to stderr] [-V severitylevel]
[-i inputfile] [-o outputfile]
[-p print statistics] [-b On error batch abort]
[-X[1] disable commands [and exit with warning]]
[-O use Old ISQL behavior disables the following]
<EOF> 批处理
控制台宽度自动调整
宽消息
默认错误级别为 — 1 对 1
[-? show syntax summary]
osql -u 用户名 -p 密码 -s 服务器 -d 数据库名 -i sql文件
把你要执行的sql语句写好保存到一个文件里面,在把上句复制到一个文本文件里面,改成bat扩展名变成批处理文件,然后系统控制面板里面有个计划任务,把批处理文件加到计划任务里面,这个比较麻烦,简单点的是sql企业管理器里面有个作业管理,在sql agent里面,启用sqlagent服务,里面的作业就可以自动按时间调度了
B. 查询每天最后一条记录的sql语句
--forM$SQL:
SELECT*
FROMtba
WHERENOTEXISTS(
SELECT1FROMtbb
WHERE1=1
ANDCONVERT(CHAR(10),a.timepoint,102)
=CONVERT(CHAR(10),b.timepoint,102)
ANDb.timepoint>a.timepoint
)
C. sql语句,求记录集每天按时间算的第一条记录
好歹也给个表结构啊。
地点 日期时间 温度
假设三个字段,地点是字符,日期时间是date,温度是数值类型
selectt.地点,t.日期,t.温度from
(select地点,to_char(日期时间,'yyyy-mm-dd')日期,row_number()over(partitionby地点,to_char(日期时间,'yyyy-mm-dd'))rn,温度from表名whereto_char(日期时间,'yyyymm')='201712')twheret.rn=1
这个查出来的就是2017年12月每天的第一条数据,剩下的没看懂,你自己加工一下吧
D. Oracle中如何定时执行一条SQL语句
通过网上查询,找到一种方案,就是先在oracle里面对要定时的sql写成存储过程,再用DBMS_scheler对存储过程进行定时执行。
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在PLSQL中,执行下面语句模拟存储过程的调用,执行后要点提交才有反应
[sql] view plain
BEGIN
INSERTINTOMY_JOB_TEST(NUM)VALUES(1);
END;
GrantCreateJobTo指定用户名
SQL>CREATEORREPLACEPROCEDURE
JOB_TEST
BEGIN
INSERTINTOMY_JOB_TEST(NUM)VALUES(1);
END;
- (此处要执行存储过程不能用exec JB_TEST,这种执行方式只能在命令行中使用)
SQL>BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'SCHEDULER_TEST',
job_type=>'STORED_PROCEDURE',
job_action=>'JOB_TEST',
start_date=>sysdate,
repeat_interval=>'FREQ=MINUTELY;INTERVAL=1');
END;
- 但是这样子定时任务并不会执行。
SQL>SELECT*FROMUSER_SCHEDULER_JOBS;
- 此时我们可以看到enable的状态是false的,因此我们需要去启动定时任务
SQL>BEGIN
DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');
然后下面建立一个存储过程JOB_TEST
(注意,这里用户需要CREATE JOB权限,可以用超级管理员用户执行下面语句给指定用户赋予该权限)
[sql] view plain
[sql] view plain
使用DBMS_SCHEDULER进行定时,这里为每分钟执行一次
[sql] view plain
我们可以用下面的命令查看一下scheler的状态
[plain] view plain
[plain] view plain
dbms_scheler.enable('j_test'); --启用jobs
dbms_scheler.disable('j_test'); --禁用jobs
dbms_scheler.run_job('j_test'); --执行jobs
dbms_scheler.stop_job('j_test'); --停止jobs
dbms_scheler.drop_job('j_test'); --删除jobs
然后再查询job的enable装态,发现为true了。
然后查看MY_JOB_TEST表,发现每分钟会往里面添加记录。
当需要修改定时任务或者调度的其他属性时,可以用下面的
dbms_scheler.set_attribute('调度名','调度属性','调度值');
至此,定时任务完成。
E. 如何让sql每天执行一下一个写好的sql语句
可以设置定时任务,比较常用的是用sqlserver 代理新建作业。有时候数据库自动备份也是用的这个。
还有一种比较复杂自己写个程序,使用系统定时任务 定时执行。
创建sql server定时任务作业步骤如下:
1.要先安装了sqlserver 代理服务
--2.鼠标右击【SQL Server 代理】,选择【启动(S)】,如已启动,可以省略此步骤;
--3.展开【SQL Server 代理】列表,右击【作业】--【新建作业】;
--3.1 在【常规】选项卡中:
-- 输入作业名称,如My Job;
--3.2 在【步骤】选项卡中:
--3.2.1 点击【新建】,输入【步骤名称】,如步骤1,类型默认T-SQL脚本,也可以选择SSIS包等;
--3.2.2 在【数据库】一栏选择要作业处理的数据库,在【命令】的右边空白编辑栏输入要执行的SQL代码,
EXEC p_Name --如:执行一个P_Name的存储过程
-- 也可以点击命令下面的【打开】,打开.sql脚本;
--3.2.3 输入运行脚本后,建议点击【分析】,确保脚本语法正确,然后点击下面的【确定】按钮;
--3.3 在【计划】选项卡中:
--3.3.1 点击【新建】,输入【计划名称】,如计划1,计划类型默认是重复执行,也可以选择执行一次等;
--3.3.2 在【频率】--【执行】处选择每天、每周或每月,以每天为例,间隔时间输入间隔几天执行一次,
-- 下面还可以选择每天一次性执行或间隔一定的时间重复执行
--3.3.3 在【持续时间】中选择计划开始执行的【起始日期】和【截止日期】,然后点击【确定】按钮;
--注意要将服务设置为自动启动,否则在重启服务器后作业就不运行了。
--启动代理服务的方法:
--开始--运行--输入services.msc--找到【SQL Server 代理】的服务并双击--【启动类型】选择自动--【确定】
--至此,定时作业已创建完毕。
F. 求一个sql语句。查询出来每一天的产生数据的条数。
是这样的,首先你需要在表A中创建一个“时间”列,假设我们取名为“time”,然后我们将js传入的时间段命名为“timeStart”及“timeEnd”,然后sql语句就可以写出来啦:
select count(*) from A where time between timeStart and timeEnd
G. 一条sql 语句查询用户表,返回每天的用户量和时间
一条sql 语句查询用户表,返回每天的用户量和时间
语句如下:
selct 日期,count(用户id) as 用户量 from 用户表
group by 日期
运行即可,这是分钟查询。
H. 如何将一条sql语句每天定时的执行,执行完了,自动发出短信
1 使用sql的job来实现sql的定时执行
2 执行完时,将短信信息写入一张有关的信息表。
3 另外一个短信服务程序,不停查找待发短信,并发送
I. 要写一条SQL语句或者存储过程插入日期,也就是第个月每天的日期。
建一个存储过程
在里面写个循环就行了
datetime
:=
20120407--起点值
while
datetime<20150428
loop
--截止时间
sqlstr='insert
into
calendar(c_date)
values('||datetime||')';
execute
immediate
sqlstr;
datetime=to_char(to_date(datetime,'yyyymmdd')+1,'yyyymmdd');--取下一天
end
loop;