ホームページ >バックエンド開発 >PHPチュートリアル >SQL Server でユーザー ログ テーブルをマージする方法_PHP チュートリアル

SQL Server でユーザー ログ テーブルをマージする方法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:01:53864ブラウズ

SQL Server データベースを保守する過程で、log20050901 のようなログ テーブルが何千も存在することがよくありますか? 各テーブルにあまり多くのデータがないため、それらを 1 つずつ開くのは非常に不便です。これらのテーブルのデータを要約して 1 つずつ開くのも非常に面倒です。以下に、テーブルを結合する自動化方法を紹介します。
私のアイデアは、一連の自動操作を完了するユーザー ストアド プロシージャを作成することです。コードは次のとおりです。
-- ストアド プロシージャに 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 sname
DECLARE @TablePref sysname
D ECLARE @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

tnames_cursor INTO @TableName
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @TableName = RTRIM (@TableName)
--以下の2行をログテーブル名に合わせて変更します

--ログテーブル名の最初の3桁を識別子として取得します

SELECT @TablePref = LEFT(@TableName,3 )
--テーブル名を判断 要件を満たしているか

IF (@TablePref='log') and (@TableName>=@TableStart) and (@TableName<=@TableEnd)
--インポート開始

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631106.html技術記事 SQL Server データベースを保守する過程で、log20050901 のようなログ テーブルが何千も存在することがよくありますか? それぞれのテーブルを 1 つずつ開いて見てみましょう。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。