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

Таким образом, цель этого состоит в том, чтобы показать безопасность, так что это делается под учетной записью гостя.Я дал доступ гостевому пользователю для выполнения этого кода.Однако я продолжаю получать ошибку NUll

Невозможно вставить значение NULL в столбец, таблицу;столбец не допускает пустых значений.Вставить не удается.Заявление было прекращено.Процедура vc_AddUserLogin попыталась вернуть состояние NULL, что недопустимо.Вместо этого будет возвращено состояние 0.

Итак, я уже попытался EXEC vc_AddUserLogin 'The Doctor', 'Gallifrey'

Вот код процедуры

CREATE PROCEDURE vc_AddUserLogin(@userName varchar(20) , @loginFrom varchar(50)) 
AS
BEGIN
    DECLARE @userID int
    SELECT @userID = vc_UserID FROM vc_User
    WHERE UserName = @userName
    INSERT INTO vc_UserLogin (vc_UserID, LoginLocation)
    VALUES (@userID, @loginFrom)
    RETURN @@identity 
END

Ожидаемый результат должен быть обновлен ID пользователя и логин.Я не ищу ответа, просто кто-то, чтобы указать мне правильное направление, потому что я потерян.Это должно быть легко, и я, вероятно, думаю об этом.

1 Ответ

0 голосов
/ 18 июня 2019

Не возвращать значения из хранимой процедуры, кроме как для статуса процедуры.Вместо этого используйте аргумент OUTPUT.

Я также рекомендую использовать предложение OUTPUT, например:

CREATE PROCEDURE vc_AddUserLogin (
    @userName varchar(20) ,
    @loginFrom varchar(50),
    @id int OUTPUT
) AS
BEGIN
    DECLARE @ids TABLE (id int);  
    INSERT INTO vc_UserLogin (vc_UserID, LoginLocation)
        OUTPUT id INTO @ids  -- "id" is the name of the id column in vc_UserLogin
        SELECT u.vc_UserId, @loginFrom
        FROM vc_users u
        WHERE u.UserName = @userName;

    SELECT @id = id
    FROM @ids;
END;

Затем этот код вызывается как:

DECLARE @id int;

EXEC vc_AddUserLogin @userName, @loginFrom, @id OUTPUT;

SELECT @id;

Возвращается NULL, если ни один пользователь не соответствует @userName.

...