Каков правильный синтаксис IF ELSE в SQL-сервере? - Предотвращение дублирования в столбце с 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 возвращает 0, если значение повторяется в таблице)

проблема в том, что я получаю ошибку в ELSE, говоря, что синтаксис неправильный. Может кто-нибудь сказать мне, что является ошибкой, или есть ли другой способ предотвратить дублирование при выполнении INSERT?

1 ответ

Решение

Ваш IF а также ELSE нужен BEGIN а также ENDТаким образом, ваш 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

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

Другие вопросы по тегам