mysql 日志合并写_SQL Server中合并用户日志表的方法_mysql

在维护SQL Server数据库的过程中,大家是不是经常会遇到成千上万的类似log20050901 这种日志表,每一个表中数据都不是很多,一个一个打开看非常不方便,或者有时候我们需要把这些表中的资料汇总,一个一个打开操作也是很麻烦。下面就介绍了一种自动化的合并表的方法。

我的思路是创建一个用户存储过程来完成一系列自动化的操作,以下是代码。

--存储过程我命名为BackupData,可以使用自己定义的名称。

--参数1:@TableTarget 生成的目标表的名称

--参数2:@TableStart 合并开始的表名

--参数3:@TableEnd 合并结束的表名

CREATE PROCEDURE BackupData @TableTarget sysname,@TableStart sysname,@TableEnd sysname

AS

DECLARE tnames_cursor CURSOR

FOR

SELECT TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

OPEN tnames_cursor

DECLARE @TableName sysname

DECLARE @TablePref sysname

DECLARE @IsTargetExist integer

--判断目标表是否存在

SET @IsTargetExist=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where table_name = @TableTarget)

--如果目标表不存在则新建表

IF @istargetexist=0

BEGIN

--EXEC中的语句可以用SQL Server编写的表脚本替换。注意在目标表中不能够存在与需合并表中名称一样的“自动编号”类型的字段。

EXEC ('CREATE TABLE [dbo].[' + @TableTarget + ']

(

[LOG1] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,

[LOG2] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,

……

)')

END

FETCH NEXT FROM tnames_cursor INTO @TableName

WHILE (@@FETCH_STATUS <> -1)

BEGIN

IF (@@FETCH_STATUS <> -2)

BEGIN

SELECT @TableName = RTRIM(@TableName)

--以下两行根据日志表的名称更改

--取日志表名的前3位作为标识

SELECT @TablePref = LEFT(@TableName,3)

--判断表名是否附合要求

IF (@TablePref='log') and (@TableName>=@TableStart) and (@TableName<=@TableEnd)

--开始导入

BEGIN

EXEC ('INSERT INTO ' + @TableTarget + ' SELECT * FROM ' + @TableName )

PRINT '表' + @TableName + '已导入' + @TableTarget + '中'

END

END

FETCH NEXT FROM tnames_cursor INTO @TableName

END

--释放内存

CLOSE tnames_cursor

DEALLOCATE tnames_cursor

把上面代码在SQL查询分析器中运行即生成存储过程BackupData。

BackupData的使用方法如下:

EXEC BackupData ‘合并后表名’,’开始表名’,’结束表名’,例如:

EXEC BackupData ‘_logs200508’,’log200508000000’,’log200508319999’。

因为我没有找到可以实现这种操作的SQL语句所以写了这样的存储过程,如果大家有好的更简单的办法请给我留言或来信:pujiang10@gmail.com。

欢迎大家阅读《SQL Server中合并用户日志表的方法_mysql》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值