存储过程中的数据重复

时间:2019-04-23 15:43:33

标签: sql-server tsql stored-procedures

我想知道如何创建存储过程来插入这样的数据:

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 :(得分:0)

在开始时添加此内容即可完成所需的操作:

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

答案 1 :(得分:0)

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)

或者,您可以将不想重复的数据组合设置为“唯一”或“主键”,并且您的代码将引发异常。 然后您可以处理该异常。