程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> SQL Server中合並用戶日志表的

SQL Server中合並用戶日志表的

編輯:關於PHP編程

在維護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)
--開始導入

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved