INSERT возвращаемое значение хранимой процедуры - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь INSERT RETURN значение для хранимой процедуры, и я просто не могу заставить его работать.

У меня есть одна таблица с именем "person.person_ids" с полями "id int, uid uniqueidentifier"

и множество других таблиц, называемых, например, "person.employee", "person.client" и т. Д. Все эти таблицы получают свои "id" s как внешние ключи из таблицы "person.person_ids".

процедура делает это:

CREATE PROCEDURE PERSON.NewPerson
AS 
BEGIN 
    DECLARE @ret INT;
    INSERT INTO PERSON.ID_PERSON
    VALUES (NEWID());
    SET @ret = SCOPE_IDENTITY()
    RETURN @ret;
END
GO

и мой INSERT выглядит следующим образом:

    INSERT INTO PERSON.EMPLOYEE VALUES
    (EXECUTE PERSON.NewPerson, 1, '15434235', '10768348153', '1962-3-2', '1999-10-2', 'PETER', '', 'SMITH', 'HAMMER')
GO

В основном я пытаюсь создать хранимую процедуру функции, которую я могу вызвать для автоматического созданияновая запись в "person.person_ids" всякий раз, когда я вставляю новую запись в "person.employee".

Я пытался использовать OUTPUT из INSERT, но я не мог заставить его работать, и INSERT не разрешен внутрифункции.

1 Ответ

2 голосов
/ 17 июня 2019

Вот ваш код с исправленными проблемами и некоторыми рекомендуемыми улучшениями.В комментариях объясняется, что и почему.

SP:

CREATE PROCEDURE PERSON.NewPerson
(
  -- Use an output parameter to get values out of an SP
  @NewId int out
)
AS 
BEGIN 
  -- Recommended to always list the columns you are inserting to
  -- Personally my preference is to select them (because that scales to multiple inserts), I never use the 'values' clause.
  INSERT INTO PERSON.ID_PERSON (uid)
    select newid();

  SET @NewId = SCOPE_IDENTITY()

  -- The return statement is for a status for the SP, usually 0 for success, some other int for an error
  RETURN 0;
END
GO

Вызов SP:

declare @MyNewId int;

-- Run the SP before your insert to get your new value    
exec PERSON.NewPerson @MyNewId out;

-- Then insert - ideally with a list of columns
INSERT INTO PERSON.EMPLOYEE
  select @MyNewId, 1, '15434235', '10768348153', '1962-3-2', '1999-10-2', 'PETER', '', 'SMITH', 'HAMMER'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...