SQL Server中合并用户日志表的方法
程序员文章站
2022-06-08 14:43:46
...
在维护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 --开始导入
我的思路是创建一个用户存储过程来完成一系列自动化的操作,以下是代码。
--存储过程我命名为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 --开始导入
上一篇: PHP基于MySQLI函数的连接数据库类
下一篇: oracle标量子查询简介和表连接改写
推荐阅读
-
Oracle中在pl/sql developer修改表的2种方法
-
sql将一个表中的数据插入到另一个表中的方法
-
SQL Server 压缩日志与减少SQL Server 文件大小的方法
-
SQL Server中检查字段的值是否为数字的方法
-
sql server数据库高可用日志传送的方法
-
SQL Server 数据库调整表中列的顺序操作方法及遇到问题
-
SQL Server2008中删除重复记录的方法分享
-
SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
-
SQL2008中 阻止保存要求重新创建表的更改 的解决方法
-
SQL Server、MySQL和Sqlite获取表结构的方法