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中In-Flight日誌究竟有多大SQLServer
- SQL server資料庫高可用日誌傳送的方法SQLServer資料庫
- SQL Server 如何合併組內字串SQLServer字串
- SQL Server 2000/2005/2008刪除或壓縮資料庫日誌的方法SQLServer資料庫
- Sql Server2014資料庫清理日誌SQLServer資料庫
- 【Spring】日誌列印sql,日誌配置列印sqlSpringSQL
- SQL Server中事務日誌自動增長對效能的影響(下)PGSQLServer
- SQL Server中事務日誌自動增長對效能的影響(上)OSSQLServer
- 分享:SQL中 LEFT JOIN 左表合併去重實用技巧SQL
- 使用SQL語句將資料庫中的兩個表合併成一張表SQL資料庫
- 解決 AS 3.1.0 版本 Logcat 合併多條日誌的問題GC
- python中合併表格的兩種方法Python
- 在SQL Server上測試事務日誌的自動增長(三)QOSQLServer
- 在SQL Server上測試事務日誌的自動增長(二)TGSQLServer
- 在SQL Server上測試事務日誌的自動增長(一)JPSQLServer
- SQL Server正確刪除Windows認證使用者的方法教程SQLServerWindows
- sql2008刪除log檔案和清空日誌的方法SQL
- Hive表小檔案合併方法總結Hive
- SQL SERVER之分割槽表SQLServer
- SQL server 修改表資料SQLServer
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008SQLServer
- MySQL 合併查詢union 查詢出的行合併到一個表中MySql
- 39,日誌列印sql 配置SQL
- Laravel sql 日誌記錄LaravelSQL
- SQL Server資料庫調整表中列的順序操作方法及遇到問題SQLServer資料庫
- MySQL 合併查詢join 查詢出的不同列合併到一個表中MySql
- python中pandas.Dataframe合併的方法有哪些?Python
- 程式中的日誌
- SQL Server 中的 ACID 屬性SQLServer
- 兩分鐘搞定阿里SQL面試題:億級表合併阿里SQL面試題
- DbForge Studio for SQL Server入門教程:在表編輯器中建立表SQLServer
- Linux 中實時檢視日誌的3種方法Linux
- python pandas Join SQL⻛格合併PythonSQL
- SQL Server誤區 一個例項多個映象和日誌傳送延遲SQLServer
- Python中合併兩個列表常用的方法有哪些?Python
- 這12種方法輕鬆合併Python中的列表Python
- rac日誌收集方法
- 多個excel檔案合併成一個excel表的方法 如何快速合併多個excel檔案Excel