0
我有兩個表(feature
和features
)彼此相關,我想讓開發人員透明地看到一個表(feature
)具有的id
(主鍵)。因此,爲了插入一個表(features
),您不必將id
放在另一個表(feature
)中,就可以使用另一個表所具有的輔助鍵。這裏是我的代碼:在表中插入另一個表的列
CREATE TABLE feature(
id INTEGER NOT NULL,
description VARCHAR(15) NOT NULL,
value VARCHAR(15) NOT NULL,
price MONEY NOT NULL,
CONSTRAINT feature_pk PRIMARY KEY(id),
CONSTRAINT feature_un UNIQUE(description, value),
CONSTRAINT feature_ck_price CHECK(price >= 0)
);
CREATE TABLE features(
name VARCHAR(20) NOT NULL,
year NUMERIC(4) NOT NULL,
feature_id INTEGER NOT NULL,
CONSTRAINT features_pk PRIMARY KEY(name,year,feature_id),
CONSTRAINT features_fk_model FOREIGN KEY(name,year) REFERENCES model(name,year),
CONSTRAINT features_pk_feature FOREIGN KEY(feature_id) REFERENCES feature(id)
);
-- Trigger not working because the features table doesnt have the columns I'm trying to use.
CREATE TRIGGER trigger_features_get_feature_id
ON features
INSTEAD OF INSERT
AS
DECLARE
@tr_features_name VARCHAR(20),
@tr_features_year NUMERIC(4),
@tr_features_description VARCHAR(15),
@tr_features_value VARCHAR(15),
@tr_features_feature_id INT
SELECT @tr_features_name=(SELECT name FROM INSERTED)
SELECT @tr_features_year=(SELECT year FROM INSERTED)
SELECT @tr_features_description=(SELECT description FROM INSERTED)
SELECT @tr_features_value=(SELECT value FROM INSERTED)
SELECT @tr_features_feature_id=(SELECT id FROM feature WHERE description = @tr_features_description AND value = @tr_features_value)
BEGIN
PRINT CONVERT(varchar(100),@tr_features_feature_id) + @tr_features_description + @tr_features_value + CONVERT(varchar(100),@tr_features_name) + @tr_features_year
INSERT INTO features VALUES(@tr_features_name,@tr_features_year,@tr_features_id)
END
我希望能夠執行下列類型的插入,所以不是使用的feature
表id
(自動生成),你可以使用此表的輔助鍵(value
和description
)。
INSERT INTO features(name,year,descripition,value) VALUES('Malibu', 2012, 'colour', 'black');
爲什麼不加你通過這4個值的存儲過程,並找到相應的ID值,然後插入記錄你?它避免了觸發器,並且可能更易於閱讀。 – 2013-03-14 18:10:01
我用你的想法,它完美的工作。 – candiani 2013-04-19 20:39:49