2013-04-12 111 views
-1

我在創建SQLite數據庫中的觸發器時遇到問題,該視圖將值插入到2個不同的表中,然後從插入的數據插入這些表和值的「ID」值進入第三張桌子。因此,基本的想法是....從插入的數據插入而不是從選擇和插入的數據

CREATE TABLE [TBL1] (ID UNIQUE INT AUTOINCREMENT,VAL1); 
CREATE TABLE [TBL2] (ID UNIQUE INT AUTOINCREMENT,VAL2); 
CREATE TABLE [TBL3] (ID1 INT,ID2 INT,VAL3); 
CREATE VIEW [v_TBL3] AS 
    SELECT (TBL1.VAL1,TBL2.VAL2,TBL3.VAL3) 
    FROM TBL3 
    INNER JOIN TBL1 ON TBL3.ID1 = TBL1.ID 
    INNER JOIN TBL2 ON TBL3.ID2 = TBL2.ID; 

========== heres the problem ========== 
CREATE TRIGGER [t_TBL3_INSERT] INSTEAD OF INSERT ON v_TBL3 
    BEGIN 
    INSERT OR IGNORE INTO [TBL1] (VAL1) VALUES NEW.VAL1; 
    INSERT OR IGNORE INTO [TBL2] (VAL2) VALUES NEW.VAL2; 

    INSERT INTO [TBL3] (ID1,ID2,v_TBL3.VAL3) 
     SELECT (TBL1.ID,TBL2.ID,VAL3) 
     FROM TBL1,TBL2,v_TBL3 
     WHERE TBL1.VAL1 = v_TBL3.VAL1 AND TBL2.VAL2 = v_TBL3.VAL2; 
    END; 

我環顧四周,就在網絡上,但我沒有找到完全是我需要讓我在那裏。有人可以幫我到那裏嗎?

回答

1

你沒有提到你的問題是什麼,但使用proper SQL syntax時,你的模式是這樣的:

CREATE TABLE TBL1 (ID INTEGER PRIMARY KEY AUTOINCREMENT, VAL1); 
CREATE TABLE TBL2 (ID INTEGER PRIMARY KEY AUTOINCREMENT, VAL2); 
CREATE TABLE TBL3 (ID1 INT, ID2 INT, VAL3); 
CREATE VIEW v_TBL3 AS 
    SELECT TBL1.VAL1, TBL2.VAL2, TBL3.VAL3 
    FROM TBL3 
    INNER JOIN TBL1 ON TBL3.ID1 = TBL1.ID 
    INNER JOIN TBL2 ON TBL3.ID2 = TBL2.ID; 

CREATE TRIGGER t_TBL3_INSERT 
INSTEAD OF INSERT ON v_TBL3 
BEGIN 
    INSERT OR IGNORE INTO TBL1 (VAL1) VALUES (NEW.VAL1); 
    INSERT OR IGNORE INTO TBL2 (VAL2) VALUES (NEW.VAL2); 

    INSERT INTO TBL3 (ID1, ID2, VAL3) 
     SELECT TBL1.ID, TBL2.ID, VAL3 
     FROM TBL1, TBL2, v_TBL3 
     WHERE TBL1.VAL1 = v_TBL3.VAL1 AND TBL2.VAL2 = v_TBL3.VAL2; 
END; 
+0

這個問題我在結束了在觸發的)是(的。我從來沒有寫過觸發器,我也沒有給我提供非常有用的錯誤信息。我回去檢查,但我所引用的一些網站顯然使用不正確的SQL語法,所以這就是爲什麼我感到困惑。只是去說明爲什麼即使你的袖口的例子應該是準確的。永遠不知道誰會在以後使用它們。謝謝您的幫助。 – jaden