每隔15分钟从服务器sql server 2005数据库里自动查询并将结果以excel表形式导出并放到局域网内的电脑上。

每隔15分钟从服务器sql server 2005数据库里自动查询并将结果以excel表形式导出并放到局域网内的电脑上。,第1张

--在sql server 2005上建立作业,计划是15分钟执行一次,步骤里将以下脚本放填入

--注意:xp_cmdshell这个功能要放开,具体百度下就知道,可以直接语句放在窗口直接执行看效果,可行了再放作业中

declare @fileTail varchar(23), --使文件名不一样

@cmdLine varchar(1000)  --命令行

--文件名日期部分:2位年数+小时+分钟,例如:1708081930

set @fileTail=convert(varchar(8),getdate(),12)+cast(datepart(hour,getdate()) as varchar)+cast(datepart(minute,getdate()) as varchar)

--这里改成你的select查询,queryout 跟上excel文件路径

set @cmdLine='bcp "select * from test.dbo.test" queryout D:\data'+@fileTail+'.xls -c -q -T'

EXEC master..xp_cmdshell @cmdLine

如果时间日期是单独一列就比较简单:

1、在最后增加1列,假定时间日期从d1开始,参考使用公式:

=MOD(D1*24*60,15)

2、下拉公式到最后一行;

3、对首行进行筛选,筛选增加列结果为 0 的即可。

我试验了一下,应该可以,你可以试试。我试验的前提

create table test3(t1 date,t2 number)

insert into test3 values(to_date('20090103010100','yyyymmddhh24miss'),1)

...

create or replace view test3_v as

select rownum id,t1,t2 from

(select to_char(t1,'yyyymmddhh24miss') t1,t2 from test3

set serveroutput on

declare

test3_rec1 test3_v%rowtype

test3_rec2 test3_v%rowtype

max_tempnumber

sum_tempnumber

begin

select max(id) into max_temp from test3_v

if max_temp<>0 then

select * into test3_rec1 from test3_v where id = 1

sum_temp:=test3_rec1.t2

for i in 2..max_temp

loop

select * into test3_rec2 from test3_v where id = i

if (test3_rec2.t1-test3_rec1.t1)<=to_char(0000001460) then

sum_temp:=sum_temp+test3_rec2.t2

else

dbms_output.put_line(concat('ans=',sum_temp))

test3_rec1.t2:=test3_rec2.t2

sum_temp:=test3_rec1.t2

end if

if i=max_temp then

dbms_output.put_line(concat('ans=',sum_temp))

end if

end loop

end if

end

/

SQL>/

ans=15

ans=20

ans=3

从我执行的结果看 上面的方法可行。

----

以上,希望对你能有帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10773308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存