Это можно сделать тремя способами.
- Определяемый пользователем тип таблицы
- Синтаксический анализ объекта Json
- Синтаксический анализ XML
Я попытался с первой опцией и передал списокпары в пользовательском типе таблицы.Это работает для меня.Я пишу здесь, это может помочь кому-то еще.
Первая задача для меня - пройти список структуры данных пары ключ-значение, а вторая - пройти по списку и вставить запись в таблицу.
Шаг 1: Создание пользовательского типа таблицы.Я создал с именем «TypeMetadata».Поскольку это пользовательский тип, я создал два атрибута типа nvarchar.Вы можете создать один из типа integer и второй типа nvarchar.
-- Type: metadata ---
IF EXISTS(SELECT * FROM SYS.TYPES WHERE NAME = 'TypeMetadata')
DROP TYPE TypeMetadata
GO
CREATE TYPE TypeMetadata AS TABLE (
mkey nvarchar (50),
mvalue nvarchar (50)
);
GO
Шаг 2: Затем я создал хранимую процедуру с именем 'createfiled'
-- Procedure: createtext --
CREATE PROCEDURE [dbo].[createfield]
@name nvarchar(50),
@text nvarchar(50),
@order int,
@type nvarchar(50),
@column_id int ,
@tid int,
@metadataList TypeMetadata readonly
AS
BEGIN
--loop through metadata and insert records --
DECLARE @mkey nvarchar(max);
DECLARE @mvalue nvarchar(max);
DECLARE mCursor CURSOR LOCAL FAST_FORWARD
FOR
SELECT mkey, mvalue
FROM @metadataList;
OPEN mCursor;
FETCH NEXT FROM mCursor INTO @mkey, @mvalue; -- Initial fetch attempt
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO template_field_metadata (name, value, template_field_id, isProperty) values (@mkey, @mvalue, 1, 0)
PRINT 'A new metadata created with id : ' + cast(SCOPE_IDENTITY() as nvarchar);
FETCH NEXT FROM mCursor INTO @mkey, @mvalue; -- Attempt to fetch next row from cursor
END;
CLOSE mCursor;
DEALLOCATE mCursor;
END
GO
Шаг 3: наконец я выполнилхранимая процедура, как;
DECLARE @metadataToInsert TypeMetadata;
INSERT INTO @metadataToInsert VALUES ('value', 'callVariable2');
INSERT INTO @metadataToInsert VALUES ('maxlength', '30');
DECLARE @fid INT;
EXEC [dbo].[createfield] @name = 'prefagent', @text = 'Pref Agent', @order = 1 , @type= 'prefagent', @column_id = 0, @tid = 49, @metadataList =@metadataToInsert;