CREATE PROCEDURE p_THMX_DayLog_dispense
(
@iMaxTableID NUMERIC(28) = NULL
)
AS
DECLARE @TonghuaBH BIGINT
DECLARE @ZhujiaoHM VARCHAR(26)
DECLARE @BeijiaoHM VARCHAR(26)
DECLARE @KaishiShijian DATETIME
DECLARE @GuaJiShijian DATETIME
DECLARE @Tonghuasc BIGINT
DECLARE @ZhuanRF TINYINT
DECLARE @Mods INT
DECLARE @rctimes INT
DECLARE @tel_mins INT
DECLARE @MaxTableID NUMERIC(28,0)
DECLARE @MinTableID NUMERIC(28,0)
DECLARE @month VARCHAR(26)
DECLARE @ErrCode NUMERIC(6,0)
DECLARE @ErrMsg VARCHAR(200)
DECLARE @JiaxiaoTfs TINYINT
DECLARE @Area VARCHAR(26)
DECLARE @BJ_Area VARCHAR(26)--0110
DECLARE @In_Out TINYINT
DECLARE @past TINYINT
BEGIN
-- 如果iMaxTableID为空,取表tCurrentBillLog当前最大的TableID
IF @iMaxTableID IS NULL
BEGIN
SELECT @MaxTableID = MAX(TonghuaBH) FROM TonghuaMX_t
-- 如果tMaxTableID为空,直接返回
IF @MaxTableID IS NULL
RETURN -- 自动日结先判断表中的最大和最小的TableID,控制一次日结只结10000条数据
SELECT @MinTableID = MIN(TonghuaBH) FROM TonghuaMX_t
IF @MaxTableID - @MinTableID > 10000
SELECT @MaxTableID = @MinTableID + 10000
END
ELSE -- 手工日结
BEGIN
SELECT @MaxTableID = @iMaxTableID
SELECT @MinTableID = MIN(TonghuaBH) FROM TonghuaMX_t
END -- 为避免事务过大,将事务进行分割,一次做2000条话单
SELECT @MinTableID = @MinTableID + 2000 -- 如果tMinTableID+2000大于tMaxTableID,则将tMaxTableID值赋给tMinTableID
IF @MinTableID >= @MaxTableID
SELECT @MinTableID = @MaxTableID WHILE @MinTableID <= @MaxTableID
BEGIN
BEGIN TRAN DAYLOG
-- 定义取话单游标
DECLARE c_DayLog_Bill CURSOR FOR
SELECT TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian,GuaJiShijian,Tonghuasc,ZhuanRF
FROM TonghuaMX_t
WHERE TonghuaBH <= @MinTableID ORDER BY TonghuaBH FOR READ ONLY -- 开始以2000条数据为一个事务进行循环
OPEN c_DayLog_Bill
FETCH c_DayLog_Bill INTO
@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian,@GuaJiShijian,@Tonghuasc,@ZhuanRF
WHILE @@FETCH_STATUS = 0
BEGIN --将数据插入到月TonghuaMX_t表中
IF (@ZhuanRF=1 and @ZhujiaoHM<>'96008')
SELECT @month= DATENAME(mm,@KaishiShijian)
IF @month=01
BEGIN
INSERT INTO
表一(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian)
VALUES(@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian)
END
ELSE
IF @month=02
BEGIN
INSERT INTO 表2(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian)
VALUES(@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian)
END
END FETCH c_DayLog_Bill INTO
@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian,@GuaJiShijian,@Tonghuasc,@ZhuanRF END CLOSE c_DayLog_Bill
DEALLOCATE c_DayLog_Bill -- 删除已日结的话单
DELETE FROM TonghuaMX_t
WHERE TonghuaBH <= @MinTableID COMMIT TRAN DAYLOG SELECT @MinTableID = @MinTableID + 2000
END RETURN
GO
(
@iMaxTableID NUMERIC(28) = NULL
)
AS
DECLARE @TonghuaBH BIGINT
DECLARE @ZhujiaoHM VARCHAR(26)
DECLARE @BeijiaoHM VARCHAR(26)
DECLARE @KaishiShijian DATETIME
DECLARE @GuaJiShijian DATETIME
DECLARE @Tonghuasc BIGINT
DECLARE @ZhuanRF TINYINT
DECLARE @Mods INT
DECLARE @rctimes INT
DECLARE @tel_mins INT
DECLARE @MaxTableID NUMERIC(28,0)
DECLARE @MinTableID NUMERIC(28,0)
DECLARE @month VARCHAR(26)
DECLARE @ErrCode NUMERIC(6,0)
DECLARE @ErrMsg VARCHAR(200)
DECLARE @JiaxiaoTfs TINYINT
DECLARE @Area VARCHAR(26)
DECLARE @BJ_Area VARCHAR(26)--0110
DECLARE @In_Out TINYINT
DECLARE @past TINYINT
BEGIN
-- 如果iMaxTableID为空,取表tCurrentBillLog当前最大的TableID
IF @iMaxTableID IS NULL
BEGIN
SELECT @MaxTableID = MAX(TonghuaBH) FROM TonghuaMX_t
-- 如果tMaxTableID为空,直接返回
IF @MaxTableID IS NULL
RETURN -- 自动日结先判断表中的最大和最小的TableID,控制一次日结只结10000条数据
SELECT @MinTableID = MIN(TonghuaBH) FROM TonghuaMX_t
IF @MaxTableID - @MinTableID > 10000
SELECT @MaxTableID = @MinTableID + 10000
END
ELSE -- 手工日结
BEGIN
SELECT @MaxTableID = @iMaxTableID
SELECT @MinTableID = MIN(TonghuaBH) FROM TonghuaMX_t
END -- 为避免事务过大,将事务进行分割,一次做2000条话单
SELECT @MinTableID = @MinTableID + 2000 -- 如果tMinTableID+2000大于tMaxTableID,则将tMaxTableID值赋给tMinTableID
IF @MinTableID >= @MaxTableID
SELECT @MinTableID = @MaxTableID WHILE @MinTableID <= @MaxTableID
BEGIN
BEGIN TRAN DAYLOG
-- 定义取话单游标
DECLARE c_DayLog_Bill CURSOR FOR
SELECT TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian,GuaJiShijian,Tonghuasc,ZhuanRF
FROM TonghuaMX_t
WHERE TonghuaBH <= @MinTableID ORDER BY TonghuaBH FOR READ ONLY -- 开始以2000条数据为一个事务进行循环
OPEN c_DayLog_Bill
FETCH c_DayLog_Bill INTO
@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian,@GuaJiShijian,@Tonghuasc,@ZhuanRF
WHILE @@FETCH_STATUS = 0
BEGIN --将数据插入到月TonghuaMX_t表中
IF (@ZhuanRF=1 and @ZhujiaoHM<>'96008')
SELECT @month= DATENAME(mm,@KaishiShijian)
IF @month=01
BEGIN
INSERT INTO
表一(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian)
VALUES(@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian)
END
ELSE
IF @month=02
BEGIN
INSERT INTO 表2(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian)
VALUES(@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian)
END
END FETCH c_DayLog_Bill INTO
@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian,@GuaJiShijian,@Tonghuasc,@ZhuanRF END CLOSE c_DayLog_Bill
DEALLOCATE c_DayLog_Bill -- 删除已日结的话单
DELETE FROM TonghuaMX_t
WHERE TonghuaBH <= @MinTableID COMMIT TRAN DAYLOG SELECT @MinTableID = @MinTableID + 2000
END RETURN
GO
解决方案 »
- sql server 2000不能执行查询,因为一些文件丢失或未注册
- 怎么自毁??
- 急急~~
- 恢复问题---急救!!!
- 有一字段col2是varchar(100),如何修改这一字段为不可重复的字段
- 判断2个工作日的存储过程怎么写啊
- VFP中用什么函数得到当前表中的记录的总数并且显示在表单上?
- 用什么方法去选择最后一个被插入的数据项?(sql server 7.0)
- 如何修改一个已经有数据的表的字段的属性,我看书上介绍是用的SELECT加UPDATE来实现的,但没有实例,我也做不出来。
- mssql2008 如何跟踪视图的查询返回结果
- 问下,sql2000 数据库存储过程中,可以写存储函数吗?怎么写,我baidu,google了,没有找到相应的语法!
- 存储过程中如何合并多个查询的内容?
WHILE @MinTableID <= @MaxTableID
BEGIN
BEGIN TRAN DAYLOG -- 定义取话单游标
DECLARE c_DayLog_Bill CURSOR FOR
SELECT TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian,GuaJiShijian,Tonghuasc,ZhuanRF
FROM TonghuaMX_t
WHERE TonghuaBH <= @MinTableID ORDER BY TonghuaBH FOR READ ONLY -- 开始以2000条数据为一个事务进行循环
OPEN c_DayLog_Bill
FETCH c_DayLog_Bill INTO
@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian,@GuaJiShijian,@Tonghuasc,@ZhuanRF
WHILE @@FETCH_STATUS = 0
BEGIN --将数据插入到月TonghuaMX_t表中
IF (@ZhuanRF=1 and @ZhujiaoHM <>'96008')
SELECT @month= DATENAME(mm,@KaishiShijian)
IF @month=01
BEGIN
INSERT INTO
表一(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian)
VALUES(@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian)
END
ELSE
IF @month=02
BEGIN
INSERT INTO 表2(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian)
VALUES(@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian)
END
END FETCH c_DayLog_Bill INTO
@TonghuaBH,@ZhujiaoHM,@BeijiaoHM,@KaishiShijian,@GuaJiShijian,@Tonghuasc,@ZhuanRF END CLOSE c_DayLog_Bill
DEALLOCATE c_DayLog_Bill -- 删除已日结的话单
DELETE FROM TonghuaMX_t WHERE TonghuaBH <= @MinTableID
COMMIT TRAN DAYLOG
SELECT @MinTableID = @MinTableID + 2000
END
----------------
这一段完全没有必要。可以直接批量修改,如:
INSERT INTO 表一(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian) select TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian FROM TonghuaMX_t
WHERE ZhuanRF=1 and ZhujiaoHM <>'96008' and DATENAME(mm,KaishiShijian)='01' INSERT INTO 表2(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian) select TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian FROM TonghuaMX_t
WHERE ZhuanRF=1 and ZhujiaoHM <>'96008' and DATENAME(mm,KaishiShijian)='02'
--不知道这样跟你的原意有没有变。一次更新所有。
CREATE PROCEDURE p_THMX_DayLog_dispense
AS
INSERT INTO 表一(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian) select TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian FROM TonghuaMX_t
WHERE ZhuanRF=1 and ZhujiaoHM <>'96008' and DATENAME(mm,KaishiShijian)='01' INSERT INTO 表2(TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian) select TonghuaBH,ZhujiaoHM,BeijiaoHM,KaishiShijian FROM TonghuaMX_t
WHERE ZhuanRF=1 and ZhujiaoHM <>'96008' and DATENAME(mm,KaishiShijian)='02'GO