SQL Server中合併使用者日誌表的方法
在維護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日誌的方法介紹SQLServer
- SQL Server 收縮事務日誌的方法SQLServer
- 刪除SQL Server日誌的具體方法SQLServer
- SQL Server事務日誌的處理方法SQLServer
- SQL SERVER日誌清除的兩種方法(轉)SQLServer
- 講解刪除SQL Server日誌的具體方法SQLServer
- SQL Server資料庫日誌清除的兩個方法SQLServer資料庫
- SQL Server 收縮日誌SQLServer
- SQL Server 錯誤日誌SQLServer
- 淺談SQL Server中的事務日誌(轉載)SQLServer
- SQL server資料庫高可用日誌傳送的方法SQLServer資料庫
- SQL Server中In-Flight日誌究竟有多大SQLServer
- SQL Server 日誌傳送配置SQLServer
- 減小SQL SERVER的日誌檔案SQLServer
- 詳細講解刪除SQL Server日誌的具體方法SQLServer
- SQL Server 如何合併組內字串SQLServer字串
- SQL Server日誌檔案總結及日誌滿的處理SQLServer
- SQL Server 事務日誌傳輸SQLServer
- sql server日誌不能shrink或truncateSQLServer
- SQL Server事務日誌介紹SQLServer
- 壓縮SQL SERVER日誌程式碼SQLServer
- 清除SQL Server資料庫日誌SQLServer資料庫
- SQL Server重做日誌管理機制SQLServer
- SQL Server ErrorLog 錯誤日誌SQLServerError
- MS SQL Server資料庫中合併複製詳解SQLServer資料庫
- SQL Server 2005日誌檔案損壞的處理方法SQLServer
- SQL Server大型事務日誌的備份SQLServer
- 淺談SQL Server中的事務日誌(一)----事務日誌的物理和邏輯構架SQLServer
- [zt] SQL Server日誌檔案總結及日誌滿的處理SQLServer
- 使用fn_dblog解析SQL SERVER 資料庫日誌方法SQLServer資料庫
- 關於SQL Server 截斷日誌[zt]SQLServer
- SQL Server 檢視資料庫日誌SQLServer資料庫
- Sql Server 2005 日誌壓縮SQLServer
- SQL SERVER 2005 日誌收縮SQLServer
- MS SQL Server 事務日誌介紹SQLServer
- SQL server 中的臨時表SQLServer
- sql server日誌檔案總結及日誌滿的處理辦法SQLServer
- SQL Server事務日誌過大的處理SQLServer