Запуск хранимой процедуры №2 в другой хранимой процедуре №1 на основе ввода из первой хранимой процедуры №1. - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно создать хранимую процедуру, которая запускает другую хранимую процедуру на основе того, что принимает первая хранимая процедура.

У меня есть основная таблица под названием «Data_Table», которая принимает JSON строк. Внутри строки JSON находится другая строка JSON, которая представляет собой данные отдельной таблицы.

Моя цель: когда главная таблица принимает эти данные, на основе 'data_set_id', она направляет JSON, встроенные в таблицу, для автоматического добавления в другую таблицу через отдельную уже настроенную хранимую процедуру. . Например:

CREATE PROCEDURE INSERT_DATA_TABLE_JSON (
    @JsonData NVARCHAR(MAX)
)
AS
  BEGIN
    DECLARE @err int

    INSERT INTO Data_Table (
submission_id,
data_set_id,
data_string

)
    SELECT *
    FROM OPENJSON (@JsonData, N'$') WITH (
submission_id varchar(20) N'$.submission_id',
data_set_id varchar(20) N'$.data_set_id',
data_string varchar(1000) N'$.data_string'

    )   

    SELECT @err = @@ERROR
    RETURN (@err)



END

Затем я бы выполнил это, выполнив следующий запрос:

   DECLARE @RC int
DECLARE @JsonData nvarchar(max)

SET @JsonData = N'[{"submission_id":"1","data_set_id":"1","data_string":"[{\"student_id\":1,\"full_name\":\"John Smith\",\"submission_id\":\"1\",\"data_set_id\":\"1\"}]"}]
for json path'
EXECUTE @RC = [dbo].[INSERT_DATA_TABLE_JSON] @JsonData
IF @RC = 0 PRINT 'OK'
ELSE PRINT 'Error'

Как видите, в столбце data_string таблицы Data_Table у нас есть еще один JSON. Этот data_set_id = 1 просто означает, что эти данные связаны с определенной таблицей c, в данном случае моя таблица Student, которая имеет следующую хранимую процедуру:

CREATE PROCEDURE INSERT_STUDENTS_JSON (
    @JsonData NVARCHAR(MAX)
)
AS
  BEGIN
    DECLARE @err int

    INSERT INTO Students (
student_id,
full_name,
submission_id,
data_set_id

)
    SELECT *
    FROM OPENJSON (@JsonData, N'$') WITH (

student_id varchar(20) N'$.student_id',
full_name varchar(20) N'$.full_name',
submission_id varchar(20) N'$.submission_id',
data_set_id varchar(20) N'$.data_set_id'

    )   

    SELECT @err = @@ERROR
    RETURN (@err)



END

Как мне автоматически разрешить первое сохраненное Процедура, чтобы прочитать содержимое встроенного JSON или иным образом, а затем чтобы он знал, что он должен использовать эти данные для заполнения соответствующей таблицы студентов.

Вот строка JSON просто в случае:

[{"submission_id":"1","data_set_id":"1","data_string":"[{\"student_id\":1,\"full_name\":\"John Smith\",\"submission_id\":\"1\",\"data_set_id\":\"1\"}]"}]

У меня есть вторая таблица с именем Lecturers, которую я назначил с data_set_id = 2, поэтому, когда встроенный JSON имеет data_set_id = 2, он направляет его в таблицу lecturers.

...