2015-04-03 22 views
1

將刪除的行從一個表移動到另一個表(具有觸發器)我有2個表,稱爲Active_QC1(id, req_name, req_type)Deleted_QC1(id, req_name, req_type),如果萬一我將從Active_QC1表中刪除數據應該移動到Deleted_QC1 。這兩張桌子都有觸發器,請問有誰能指導我?使用ms sql

回答

0

我建議你在Active_QC1表中添加一列,其名稱爲Status_Flagvarchar類型,並設置狀態標誌'Y'或'N'爲相應的刪除與否。那麼你可以嘗試以下查詢

查詢#1:

ALTER TABLE Active_QC1 
ADD Status_Flag VARCHAR2(3 BYTE) 

查詢#2:

UPDATE Active_QC1 
SET Status_Flag = 'Y' 
WHERE id = <deleted records id> 

查詢#3:

INSERT INTO Deleted_QC1 (id, req_name, req_type) 
    SELECT id, req_name, req_type 
    FROM Active_QC1 
    WHERE Status_Flag = 'Y'; 

查詢4。

DELETE FROM Active_QC1 
WHERE Status_Flag = 'N'; 
0

您可以在DELETE語句中使用OUTPUT clause(microsoft.com)。一個簡單的DELETE語句的基本輪廓是什麼如下:

DELETE FROM Active_QC1 
OUTPUT DELETED.* INTO Deleted_QC1 
WHERE id=5; 

它所做的是刪除所有行Active_QC1id=5,然後插入這些行到Deleted_QC1

一個例子:

CREATE TABLE #Active_QC1(id INT, req_name VARCHAR(128), req_type INT); 
CREATE TABLE #Deleted_QC1(id INT, req_name VARCHAR(128), req_type INT); 

INSERT INTO #Active_QC1(id,req_name,req_type) 
VALUES 
    (1,'engage',3), 
    (2,'forward',5), 
    (3,'obliterate',3), 
    (4,'reply',5), 
    (5,'delete',5); 

DELETE FROM 
    #Active_QC1 
OUTPUT 
    DELETED.id, 
    DELETED.req_name, 
    DELETED.req_type 
INTO 
    #Deleted_QC1(id,req_name,req_type) 
WHERE 
    req_type=5; 

SELECT*FROM #Deleted_QC1; 

DROP TABLE #Deleted_QC1; 
DROP TABLE #Active_QC1; 

此腳本使得兩個臨時表#Active_QC1#Deleted_QC1具有相同表定義。一些行被添加到#Active_QC1DELETE語句用req_type=5刪除#Active_QC1中的所有行,並將它們插入#Deleted_QC1。該腳本最終選擇#Deleted_QC1中的所有行。結果如下:

╔════════╦══════════╦══════════╗ 
║  id ║ req_name ║ req_type ║ 
╠════════╬══════════╬══════════╣ 
║  2 ║ forward ║  5 ║ 
║  4 ║ reply ║  5 ║ 
║  5 ║ delete ║  5 ║ 
╚════════╩══════════╩══════════╝