当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server中合并用户日志表的方法

MSSQL
mssql server 存储过程里,bulk insert table from ''路径+文件'',路径固定,文件名不固定的实现方法
请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write,Duration,SPID.........的解释
mssql server .ldf和.mdf的文件附加数据库的sql语句
[js]javascript与剪贴板交互
mssql中得到当天数据的语句
在SQL中使用convert函数进行日期的查询的代码
sql server中datetime字段去除时间的语句
sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
推荐SQL Server 重新恢复自动编号列的序号的sql代码
清空MSSQL日志 与set recovery simple
mssql2005注入方法小结
[原创]比较详细的完美解决安装sql2000时出现以前的某个程序安装已在安装计算机上创建挂起的文件操作。
sql语句中如何将datetime格式的日期转换为yy-mm-dd格式
重装MS SQL Server 2000前必须彻底删除原安装文件的方法
SQL Server 不删除信息重新恢复自动编号列的序号的方法
MSSQL差异备份取系统权限的相关软件下载
解决MSSQL2005远程连接sql2000非默认端口数据库的问题
SQL命令大全-中英文对照
用SQL语句实现随机查询数据并不显示错误数据的方法
sql server不存在 sql server拒绝访问

MSSQL 中的 SQL Server中合并用户日志表的方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 50 ::
收藏到网摘: n/a

 

在维护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语句所以写了这样的存储过程,如果大家有好的更简单的办法请给我留言或来信:[email protected]