SQL 服务器中正确的 IF ELSE 语法是什么? - 使用 SP 防止列中的重复

What is the correct IF ELSE syntax in SQL server? - Preventing Duplications in a Column with SP

我必须防止列重复,所以我制作了这个存储过程

CREATE PROCEDURE [dbo].Agregar_Personal
    @nom varchar(20),
    @apll varchar(20),
    @tel int,
    @dep int,
    @sal float
AS
IF dbo.UnicoApellido(@apll) = 0
    INSERT INTO Personal (Nombre,Apellido,Telefono,Departamento,Salario)
    VALUES (@nom,@apll,@tel,@dep,@sal)  
    RETURN 0;
ELSE    
    RETURN 1;

(函数dbo.UnicoApellido returns 0 如果值在table中重复)

这里的问题是我在 ELSE 中遇到错误,说语法错误。 谁能告诉我错误是什么,或者在执行 INSERT 时是否有其他方法来防止重复?

您的 IFELSE 需要 BEGINEND,因此您的 SQL 需要是:

CREATE PROCEDURE [dbo].Agregar_Personal
    @nom varchar(20),
    @apll varchar(20),
    @tel int,
    @dep int,
    @sal float
AS
    IF dbo.UnicoApellido(@apll) = 0 BEGIN
        INSERT INTO Personal (Nombre,Apellido,Telefono,Departamento,Salario)
        VALUES (@nom,@apll,@tel,@dep,@sal)  
        RETURN 0;
    END ELSE BEGIN
        RETURN 1;
    END
GO

但是,这并不能阻止有人手动插入数据。您可能需要考虑向 table 添加唯一索引。