之前没有接触过SQL作业的操作
只是近期有个问题需要解决,没办法不学习
希望有给力的师傅给我写一个简单的例子
以我问题为中心,写个实例给我,截图也好
麻烦了!
如果能细心帮我搞定的,出来得到此贴100分
还可以到我昨天发的帖子回话,得到100分
非常感谢
如题:
现一数据库有T_SYS_COUNT表
表中有tablename和count字段
主要用来记录某张表的流水号最大值
比如现在A表的流水号已经从1排到1000,那么对应这里就是A 1000
我现在要实现每月1号定时把T_SYS_COUNT表中name等于A的count更新为1
记住,是要定时,就算数据没有数据插入或者删除动作也要执行
我知道是用作业来实现
可是我不会,所以希望给力的朋友能帮忙贴图
以这题为例
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
--你的SQL语句或存储过程
--确定
--"计划"项
--新建计划
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"重复执行"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定像这种复制粘贴的例子就算了
只是近期有个问题需要解决,没办法不学习
希望有给力的师傅给我写一个简单的例子
以我问题为中心,写个实例给我,截图也好
麻烦了!
如果能细心帮我搞定的,出来得到此贴100分
还可以到我昨天发的帖子回话,得到100分
非常感谢
如题:
现一数据库有T_SYS_COUNT表
表中有tablename和count字段
主要用来记录某张表的流水号最大值
比如现在A表的流水号已经从1排到1000,那么对应这里就是A 1000
我现在要实现每月1号定时把T_SYS_COUNT表中name等于A的count更新为1
记住,是要定时,就算数据没有数据插入或者删除动作也要执行
我知道是用作业来实现
可是我不会,所以希望给力的朋友能帮忙贴图
以这题为例
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
--你的SQL语句或存储过程
--确定
--"计划"项
--新建计划
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"重复执行"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定像这种复制粘贴的例子就算了
@BillName nvarchar(50) ,
@LoginTime datetime
AS
declare @count int
declare @NumLen int
declare @BillText nvarchar(50)
declare @CurrentDate datetime
declare @lenNo nvarchar(5)
declare @lenMon nvarchar(2)
declare @countLength int
declare @result nvarchar(60)
set @LoginTime=getdate()
declare BillNo_cursor cursor for select currentcount,BillText,CurrentDate,NumLen from B_IDSetByMNo where BillName=@BillName
open BillNo_cursor
fetch next from BillNo_cursor into @count,@BillText,@CurrentDate,@NumLen
close BillNo_cursor
Deallocate BillNo_cursor
if(@@Fetch_status=-1)
begin
set @BillText=@BillName;
set @count=1;
set @NumLen=6;
insert into B_IDSetByMNo(BillText,CurrentCount,NumLen,Mem,CurrentDate,BillName) values(@BillText,@count,@NumLen,@BillName,@LoginTime,@BillName)
end
else
begin
if year(@LoginTime)=year(@CurrentDate) and month(@LoginTime)=month(@CurrentDate)
begin
set @count=@count+1
update B_IDSetByMNo set currentcount=@count,currentdate=@LoginTime where BillName=@BillName
end
else
begin
set @count=1;
update B_IDSetByMNo set currentcount=1,currentdate=@LoginTime where BillName=@BillName
end
end
set @result=@BillText
if len(month(@LoginTime))=1
set @lenMon='0'+convert(nvarchar(2),month(@LoginTime))
else
set @lenmon=convert(nvarchar(2),month(@LoginTime))
if(len(@count)<@NumLen)
set @lenNo=substring('0000000001',0,@NumLen-len(@count)+1)
set @lenNo=@lenNo+convert(nvarchar,@count)
set @result=@result +substring(CAST(year(getdate()) as CHAR),3,2)+@lenmon+substring('0000000001',0,@NumLen-len(@count)+1)+convert(nvarchar,@count)
select @result
GO
这是本人写的存储过程,用来获取流水号,每月都是从1开始的,以上仅供参考
我再给你加一个字段,叫MM(CHAR(4))记录序号对应的月份。存储过程这样写:
CREATE procedure [dbo].[GetSNO](@TABLENAME VARCHAR(50), @SNO CHAR(4) output) as
begin
DECLARE @MM CHAR(4),@NO INT
SET @MM = SUBSTRING(convert(CHAR(8), getdate(), 112), 3,4);
begin tran
if not exists(select 1 from T_SYS_COUNT where TABLENAME = @TABLENAME)
begin
insert into T_SYS_COUNT(TABLENAME,COUNT,MM)
values(@TABLENAME,1,@MM)
set @SNO=1
end
else if not exists(select 1 from T_SYS_COUNT where TABLENAME = @TABLENAME AND MM = @MM)
begin
DELETE FROM T_SYS_COUNT WHERE TABLENAME = @TABLENAME;
insert into T_SYS_COUNT(TABLENAME,COUNT,MM)
values(@TABLENAME,1,@MM)
set @SNO=1
end
else
begin
UPDATE T_SYS_COUNT set @NO = COUNT = (COUNT+1)%10000 where TABLENAME = @TABLENAME;
SET @SNO=RIGHT('000'+@NO,4);
end
commit tran
end
GO这是测试代码
DECLARE @SNO CHAR(4)
EXEC GetSNO 'A',@SNO OUT
PRINT @SNO
http://blog.csdn.net/maco_wang/article/details/3980517