Изучите хранимую процедуру и добавьте еще один параметр - PullRequest
0 голосов
/ 29 апреля 2020

Я застрял здесь, и я потерял где-то посередине. Поэтому я постараюсь объяснить ситуацию.

У меня есть хранимая процедура, которая INSERT хранит данные в таблице, и она отлично работает. Теперь я добавляю еще одну переменную, и эта переменная имеет решающее значение.

Я получаю данные из Active Directory и сохраняю их в файл. С другой стороны, у меня есть таблица в базе данных, которая также содержит некоторые данные.

CREATE PROCEDURE [dbo].[ADProcTemp]
    @Username varchar(250),
    @DisplayName varchar(70),
    @isEnabled tinyint,
    @PassNevExp tinyint
AS
    SET NOCOUNT ON
BEGIN
    IF NOT EXISTS (SELECT TOP 1 PrezimeIme FROM [dbo].[tblZaposleni_AD] WITH (NOLOCK) 
                   WHERE NetworkLogin = @Username)
    BEGIN
        IF(@isEnabled = 1)
            INSERT INTO [dbo].[tblZaposleni_AD](NetworkLogin, PrezimeIme, Status, PassNevExp)
            VALUES (@Username, @DisplayName, @isEnabled, @PassNevExp)
    END
    ELSE
    BEGIN
        UPDATE [dbo].[tblZaposleni_AD]
        SET Status = @isEnabled         
        WHERE NetworkLogin = @Username 
          AND Status <> @isEnabled              
    END

    SELECT @@ROWCOUNT AS NumberOfRowsAffected
END

Теперь я добавляю if(@isEnabled = 1) и сейчас мне нужно добавить logi c, если PassNevExp также. Что-то вроде этих логи c.

@isEnable  @PassNevExp      Result
------------------------------------
   0            0           Nothing
   0            1           INSERT
   1            0           INSERT
   1            1           INSERT

Для меня это немного сложно, и я застрял. Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 29 апреля 2020

Вы можете использовать выражение CASE для условного обновления значения Status:

UPDATE [dbo].[tblZaposleni_AD]
    SET Status = CASE
            WHEN @isEnable=0 AND @PassNevExp=0 THEN 'Nothing'
            WHEN @isEnable=0 AND @PassNevExp=1 THEN 'First Case'
            WHEN @isEnable=1 AND @PassNevExp=0 THEN 'Second Case'
            WHEN @isEnable=1 AND @PassNevExp=1 THEN 'Third Case'
        END
WHERE
    NetworkLogin = @Username 
    AND Status <> @isEnabled;
...