Функция для получения последнего идентификатора автоинкремента равна LAST_INSERT_ID()
.
Вы не можете использовать @PropertyID
для доступа к объявленной переменной с именем PropertyID
.Аналогично, вы не можете использовать @AccountID
для доступа к параметру AccountID
.
Вам не нужно объявлять переменную PropertyID
, поскольку она уже объявлена как параметр OUT
.
Вам нужно ;
в конце каждого оператора.Используйте директиву DELIMITER
, чтобы указать альтернативный разделитель запросов, чтобы вы могли использовать ;
в процедуре.
В конце вы можете просто использовать SELECT PropertyId
, чтобы вернуть значение переменной, выне нужно запрашивать саму таблицу.
DELIMITER $$
CREATE PROCEDURE dbo.spInsertPropertyAndUnit (
IN AccountId INTEGER,
IN Address VARCHAR(255),
IN AddressNumber VARCHAR(255),
IN City VARCHAR(255),
IN State VARCHAR(255),
OUT PropertyId INTEGER
)
BEGIN
PropertyId INTEGER;
-- make property
INSERT INTO tblProperties
(Address, AddressNumber, City, State)
VALUES (
IFNULL(Address, ''),
IFNULL(AddressNumber, ''),
IFNULL(City, ''),
IFNULL(State, '')
);
SET PropertyId = LAST_INSERT_ID();
-- make a default unit
INSERT INTO tblUnits (PropertyId, UnitNumber)
VALUES (PropertyId, 1);
-- Make an Accountpropertymembership
INSERT INTO tblAccountPropertyMemberships (AccountId, PropertyId, MembershipRoleId)
VALUES (AccountId, PropertyId, 0);
SELECT PropertyId;
END
$$
DELIMITER ;