• 技术文章 >php教程 >php手册

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

    2016-06-13 10:05:45原创494
    在维护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)
    --开始导入
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:解决SqlTransaction用尽的问题(SQL处理超时) 下一篇:mysql常识和基本操作
    PHP编程就业班

    相关文章推荐

    • SSI使用详解(二)• PHP应用程序架构浅谈• 基于php-fpm 参数的深入理解• PHP源码之explode使用说明• php.ini 中文版

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网