Я пытаюсь написать хранимую процедуру для добавления данных в три таблицы одновременно. Хранимая процедура вызывает три другие хранимые процедуры. У меня есть данные для каждого параметра, но я продолжаю получать ошибку отсутствующего параметра в SQL Server. Проблема в том, что параметр, указанный в сообщении об ошибке, не является частью инструкции EXECUTE основной хранимой процедуры. Запуск sp_help
показывает, что я передаю все необходимые параметры основной процедуре. Код ниже.
Error message: Msg 201, Level 16, State 4, Procedure uspAddCustomerJob, Line 0 [Batch Start Line 157]
Procedure or function 'uspAddCustomerJob' expects parameter '@intJobID', which was not supplied.
-- =========================================
-- stored procedure to add customer record to customer table
GO
CREATE PROCEDURE uspAddCustomer
@intCustomerID AS INTEGER = 0 OUTPUT
,@strName AS VARCHAR(250)
,@strPhone AS VARCHAR(250)
,@strEmail AS VARCHAR(250)
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
INSERT INTO TCustomers(strName, strPhone, strEmail)
VALUES (@strname, @strPhone, @strEmail)
COMMIT TRANSACTION
GO
-- =================================================
-- stored procedure to add job to job table
GO
CREATE PROCEDURE uspAddJob
@intJobID AS INTEGER = 0 OUTPUT
,@strJobDescription AS VARCHAR(250)
,@dtmStartDate AS DATETIME
,@dtmEndDate AS DATETIME
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
INSERT INTO TJobs(strJobDescription, dtmStartDate, dtmEndDate)
VALUES (@strJobDescription, @dtmStartDate, @dtmEndDate)
COMMIT TRANSACTION
GO
-- ===================================================
-- stored procedure to add PK's from previous tables to a third table (many-to-many relationship)
GO
CREATE PROCEDURE uspAddCustomerJob
@intCustomerJobID AS INTEGER OUTPUT
,@intCustomerID AS INTEGER
,@intJobID AS INTEGER
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
INSERT INTO TCustomerJobs(intCustomerID, intJobID)
VALUES (@intCustomerID, @intJobID)
COMMIT TRANSACTION
GO
-- =====================================================
-- main stored procedure that calls each component stored procedure, with execution code at the bottom. Running the EXECUTE statement yields the error mentioned above.
GO
CREATE PROCEDURE uspAddCustomerAndJob --main procedure
@intCustomerJobID AS INTEGER = 0 OUTPUT
,@strName AS VARCHAR(250)
,@strPhone AS VARCHAR(250)
,@strEmail AS VARCHAR(250)
,@strJobDescription AS VARCHAR(250)
,@dtmStartDate AS DATETIME
,@dtmEndDate AS DATETIME
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
DECLARE @intCustomerID AS INTEGER = 0
DECLARE @intJobID AS INTEGER = 0
EXECUTE uspAddCustomer @intCustomerID OUTPUT, @strName, @strPhone, @strEmail;
EXECUTE uspAddJob @intJobID OUTPUT, @strJobDescription, @dtmStartDate, @dtmEndDate;
EXECUTE uspAddCustomerJob @intCustomerJobID OUTPUT, @intJobID;
COMMIT TRANSACTION
GO
--TEST CODE
DECLARE @intCustomerJobID AS INTEGER;
EXECUTE uspAddCustomerAndJob @intCustomerJobID OUTPUT, 'Joe Smith', '513-555-9644', 'Jsmith@yahoo.com', 'Fix cracked sewer pipe', '6/1/2019', '6/5/2019'