自訂的Table快取機制與KeyValue應用

出自ProgWiki

跳轉到: 導航, 搜尋

用途

使用比對資料異動時間的方式,來判斷是否重建近端DB的Table。

程式碼

DECLARE @KeyName NVARCHAR(50);
    DECLARE @KeyValue NVARCHAR(50);
    DECLARE @strUpdateDate AS NVARCHAR(50);
    DECLARE @UpdateDate AS DATETIME;                    --上次抓的資料的最後異動日期
    DECLARE @UpdateDate_Remote AS DATETIME;        --遠端DB上的資料的最後異動日期
 
    DECLARE @IsUpdateDate INT;
    SET @IsUpdateDate = 0;
 
 
--更新自訂快取的庫存紀錄
BEGIN TRANSACTION
    SET @KeyName = 'StockUpdateDate';   --自訂的快取機制用的變數名
    SELECT @strUpdateDate= [dbo].[getKeyValue](@KeyName);
    IF (@UpdateDate = '')
        SET @UpdateDate = null;
    ELSE
        SET @UpdateDate = CONVERT(DATETIME, @strUpdateDate);
    SELECT @UpdateDate_Remote = [LastDate] FROM View_Stock_LastDate;
 
    --如果資料異動
    IF ((@UpdateDate IS null) or (@UpdateDate_Remote > @UpdateDate))
        BEGIN
            SELECT @IsUpdateDate = @IsUpdateDate + 1;
 
--刪除近端暫存用的實體Table, 並自View中從新抓資料產生新的Table
            IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Table_Stock]') AND type in (N'U'))
                DROP TABLE Table_Stock;
            SELECT * INTO Table_Stock FROM View_Stock;
 
--記錄近端資料的最後更新時間
            SET @KeyValue = CONVERT(NVARCHAR(50),@UpdateDate_Remote );
            EXECUTE @RC = [dbo].[setKeyValue] @KeyName,@KeyValue;
        END
--如果都成功, 就繼續,反之就回退
IF (@@ERROR = 0)
    COMMIT TRANSACTION
ELSE
    ROLLBACK TRANSACTION

相關

個人工具
名字空間
變換
動作
導航
分類
其他
技術類News或部落格
工具箱