Повторяющиеся данные в хранимой процедуре - PullRequest
0 голосов
/ 23 апреля 2019

Я хотел бы знать, как создать хранимую процедуру для вставки данных следующим образом:

CREATE PROCEDURE InsertActor
    @fname VARCHAR(15),     
    @sname VARCHAR(20), 
    @age INT = NULL,
    @gender VARCHAR(6) = NULL            
AS 
BEGIN 
    SET NOCOUNT ON;  

    INSERT INTO Actor (fname, sname, age, gender) 
    VALUES (@fname, @sname, @age, @gender)
END;

Но у меня проблема с повторяющейся датой, я могу добавить 10 раз одинаковых актеров.Вы можете мне помочь?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019
IF Not EXISTS(SELECT 1 FROM Actors WHERE  fname = @fname AND sname = @sname and age=@age and gender=@gender)
    INSERT INTO 
Actor( 
    fname,      
    sname, 
    age,
    gender
) 
VALUES( 
    @fname,     
    @sname, 
    @age,
    @gender)

В качестве альтернативы вы можете установить комбинацию данных, которую вы не хотите повторять, в качестве уникального или первичного ключа, и ваш код выдаст исключение. Тогда вы можете обработать исключение.

0 голосов
/ 23 апреля 2019

Добавление этого в начале должно выполнить то, что вам нужно:

IF EXISTS(SELECT * FROM Actors WHERE  fname = @fname AND sname = @sname)
    RETURN;

Или вы можете сделать более сложную вставку, если вы предпочитаете этот способ:

;WITH ToInsert AS
(
    SELECT @fname AS fname,  @sname AS sname, @age AS age, @gender AS gender
)
INSERT INTO Actors
    (fname, sname, age, gender)
    SELECT I.fname, I.sname, I.age, I.gender FROM Actors A RIGHT JOIN ToInsert I ON  A.fname = I.fname AND A.sname = I.sname
    WHERE T.fname IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...