Мне нужно создать хранимую процедуру, которая запускает другую хранимую процедуру на основе того, что принимает первая хранимая процедура.
У меня есть основная таблица под названием «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.