我有两个彼此相关的表(feature
和features
),我想让开发人员透明id
(主键)一个表({ {1}})。因此,为了插入一个表(feature
),您不必放置另一个features
的{{1}},您可以使用另一个表的辅助键具有。这是我的代码:
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
(自动生成),而是可以使用此表的辅助键( id
和feature
)。
value
答案 0 :(得分:0)
我按照@adam说的那样,这是结果
CREATE PROCEDURE [dbo].procedure_insert_features
@pr_car_name VARCHAR(20) = NULL,
@pr_car_year NUMERIC(4) = NULL,
@pr_feature_description VARCHAR(15),
@pr_feature_value VARCHAR(15)
AS
SET NOCOUNT ON
BEGIN
DECLARE @pr_feature_id AS INTEGER
SET @pr_feature_id = (SELECT ID FROM [automobile].[dbo].[feature] WHERE description = @pr_feature_description AND value = @pr_feature_value);
-- PRINT @pr_feature_id
IF @pr_feature_id IS NOT NULL
BEGIN
INSERT INTO [automobile].[dbo].available_features VALUES(@pr_car_name,@pr_car_year,@pr_feature_id);
END
ELSE
BEGIN
RAISERROR ('ID NOT FOUND, PLEASE CHECK SPELLING', 10,1);
END
END