存储过程求教!

pfworld 2011-05-31 05:18:47
想做一个定时执行的存储过程,每天给一个统计表更新数据结果,但是很少用存储过程,特发帖求教!


表A 流水表
表B 统计表

存储过程P 每天定时执行 根据表A数据(每天合计结果)更新到到表B(主键ADay)。


有没有相关范例参考!
...全文
181 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
pfworld 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 pfworld 的回复:]
SQL code

/*月检测500-10000公斤以内量*/
begin
declare cursor_5_10_count cursor for select count(*) from tb_Data_Det
where siteID=@ledsiteID
……
[/Quote]


寻求优化方案!
xieyihn 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwwgou 的回复:]
SQL code
--#1.创建SP
CREATE PROCEDURE proc_test
AS
DECLARE @date CHAR(10)
SET @date = CONVERT(CHAR(10), GETDATE(), 120)
--SELECT @date
IF NOT EXISTS(SELECT 1 FROM 表B WHERE ADay = @date)
BEGIN
……
[/Quote]

請問SELECT 1 FROM 表B 中 的“1”代表什麽意思啊?
pengpeng409 2011-06-01
  • 打赏
  • 举报
回复
创建个存储过程,然后用作业定时调用。。。。
pfworld 2011-06-01
  • 打赏
  • 举报
回复

/*月检测500-10000公斤以内量*/
begin
declare cursor_5_10_count cursor for select count(*) from tb_Data_Det
where siteID=@ledsiteID
and detectOw >500
and detectOw <=10000
and year(detectCheckDate)=year(GETDATE())
and month(detectCheckDate)=month(GETDATE())
open cursor_5_10_count
fetch cursor_5_10_count into @strled5_10TestValue

close cursor_5_10_count /*加上此行来关闭内层游标*/
deallocate cursor_5_10_count /*加上此行来释放内层游标*/
end


在这个条件中,先搜索时间区域快还是,先搜索值区域呢?

pfworld 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pfworld 的回复:]
查资料自己写出来了!感谢!


SQL code


USE [OverrunManageBureau]
GO
/****** Object: StoredProcedure [dbo].[UP_Stat_LED] Script Date: 05/31/2011 18:14:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDEN……
[/Quote]


有什么优化方法没有?
打一壶酱油 2011-06-01
  • 打赏
  • 举报
回复
[code=SQL]

1.建立一个存储过程
create proc xxx as
XXX
go


2. 建立一个作业,在作业中调用存储过程
exec xxx

[/code]
rfq 2011-06-01
  • 打赏
  • 举报
回复
做个 代理作业 很好用 定期执行

竹林听雨2005 2011-06-01
  • 打赏
  • 举报
回复
少说了句:如果后面带入where条件,那表示该条件组合下的数据记录数。。。。。。。。。。。。。
竹林听雨2005 2011-06-01
  • 打赏
  • 举报
回复
这是个用法,如果返回的行数>0,则表明表里有数据,否则表明表里没数据。
这种做法是你并不熟悉这个表结构时,这样操作很方便就得到表里的记录数了。

--小F-- 2011-05-31
  • 打赏
  • 举报
回复
---2000
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:

--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排为一天一次


然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.



--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-29 19:07:45
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:38
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
-- Subject: SQL Server 2008 定时作业的制定(SQL2005参考此方法)
--------------------------------------------------------------------------
--SQL Server 2008 定时作业的制定
--1.打开【SQL Server Management Studio】,在【对象资源管理器】列表中选择【SQL Server 代理】;
--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 代理】的服务并双击-->【启动类型】选择“自动”-->【确定】

--至此,定时作业已创建完毕。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2010/04/29/5543694.aspx
骑驴快跑 2011-05-31
  • 打赏
  • 举报
回复
牛 顶 学习~
pfworld 2011-05-31
  • 打赏
  • 举报
回复
查资料自己写出来了!感谢!



USE [OverrunManageBureau]
GO
/****** Object: StoredProcedure [dbo].[UP_Stat_LED] Script Date: 05/31/2011 18:14:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UP_Stat_LED]
(
@ledsiteID varchar(50)
)
AS

declare @strledDayTestValue varchar(50)
declare @strMoneyTestValue varchar(50)

set @strledDayTestValue='0'
set @strMoneyTestValue='0'

/*日检测量*/
begin
declare cursor_day_count cursor for select count(*) from tb_Data_Det
where siteID=@ledsiteID
and year(CheckDate)=year(GETDATE())
and month(CheckDate)=month(GETDATE())
and day(CheckDate)=day(GETDATE())
open cursor_day_count
fetch cursor_day_count into @strledDayTestValue

close cursor_day_count /*加上此行来关闭内层游标*/
deallocate cursor_day_count /*加上此行来释放内层游标*/
end

/*月金额数*/
begin
declare cursor_Money_count cursor for select sum(overrunPnsMnySum) from tb_Data_Run
where siteID=@ledsiteID
and year(PrintDate)=year(GETDATE())
and month(PrintDate)=month(GETDATE())
open cursor_Money_count
fetch cursor_Money_count into @strMoneyTestValue

close cursor_Money_count /*加上此行来关闭内层游标*/
deallocate cursor_Money_count /*加上此行来释放内层游标*/
end

/*如果查询值为空那么赋0*/
begin
if @strMoneyTestValue is null
set @strMoneyTestValue='0'
end

/*更新统计-LED显示*/
begin
update tb_Stat_LED set [ledDayTestValue] = @strledDayTestValue
,[ledMoneyTestValue]= @strMoneyTestValue
,[ledUpdate] = GETDATE()
where ledSiteID=@ledsiteID
end


但是感觉效率不高!有没有好的方法?

longai123 2011-05-31
  • 打赏
  • 举报
回复
作业吧。具体就自已练。大家一起进步
叶子 2011-05-31
  • 打赏
  • 举报
回复
参考:
http://topic.csdn.net/u/20090409/11/288B183F-BAF9-453B-BF75-5F6C7587D498.html
飘零一叶 2011-05-31
  • 打赏
  • 举报
回复
大海都是水,人生都是眼泪
syb1045 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jwdream2008 的回复:]
SQL作业计划!
[/Quote]
+1. 感觉这个可行, 以前有用这个定时同步数据
Shawn 2011-05-31
  • 打赏
  • 举报
回复
--#1.创建SP
CREATE PROCEDURE proc_test
AS
DECLARE @date CHAR(10)
SET @date = CONVERT(CHAR(10), GETDATE(), 120)
--SELECT @date
IF NOT EXISTS(SELECT 1 FROM 表B WHERE ADay = @date)
BEGIN
--根据业务逻辑更改SQL
INSERT INTO 表B
(
ADay,
ID,
field1,
field2
)
SELECT
@date,
ID,
SUM(field1),
COUNT(field2)
FROM 表A
GROUP BY @date, ID
END

GO
--#2.创建一个Job,调用SP,并设置你的执行计划.
快溜 2011-05-31
  • 打赏
  • 举报
回复
写个存储过程,每天定时执行一次。建立一个job。
jwdream2008 2011-05-31
  • 打赏
  • 举报
回复
SQL作业计划!

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧