ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MSSQL - 프로시저 내에 JSON Parameter 값을 Insert 하기
    IT/Database 2021. 9. 14. 15:33
    반응형

     

    MSSQL 프로시저에 백엔드에서 보내는 JSON 파라미터를 이용하여 For문을 수행하여 Count 만큼 Insert 하는 내용을 작성하려고 합니다.

     

    제가 사용하고 있는 Backend 언어는 Node.js입니다. 

     

    1. Node.js 

      1) MSSQL 프로시저 호출

      2) 프로시저에 JSON 과 Count 파라미터 보내기 → JSON.stringfy() 이용해서 String으로 만들어서 보낼 것.

    function test(json) {
        return new Promise(function (resolve, reject) {
            var connection = new Connection(dbconfig);
            connection.on('connect', function () {
                var request = new Request('exec testProc ' +
                    @test_cnt = @test_cnt, @testJSON = @testJSON, function (err) {
                        if (err) {
                            reject(new Error(err));
                        }
                        connection.close();
                        resolve(result);
                    });
    
                request.on('row', function (columns) {
                    let queryResult = columns[0].value;
                    if (queryResult > 0) {
                        result = 1;
                    }
                });
    
                request.addParameter('test_cnt', Types.NVarChar, json.test_cnt); // jsonArray Length
                request.addParameter('testJSON', Types.NVarChar, JSON.stringify(json.testJSON)); // json Array
                connection.execSql(request);
            });
        });
    }

     


    2. MSSQL 프로시저

    설명 :

     - JSON Array의 Value값을 For (While)문을 이용해 순차적으로 Insert

     - JSON의 값을 가져오기 위해서 $[@i].id 만들기 위해 문자열을 조합

     

    USE [****]
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[testProc]
    	-- 파라미터로 받은 값
    	@testJSON NVARCHAR(MAX), -- JSON Array to String
    	@test_cnt int -- JSON Array Length
    as
    
    begin
    	DECLARE @i int
    	DECLARE @id NVARCHAR(100)
    	DECLARE @device NVARCHAR(100)
    
    	DECLARE @variable_text NVARCHAR(100)
    	DECLARE @variable_text_device NVARCHAR(100)
    	DECLARE @variable_text_id NVARCHAR(100)
    	DECLARE @jsonDataUserValue NVARCHAR(100)
    	DECLARE @jsonDataDeviceValue NVARCHAR(100)
    
    	set @i = 0
        -- count 만큼 for문 실행
    	WHILE(@i < @test_cnt)
    		BEGIN
    			-- json parsing variable
    			set @variable_text = N'$['
    			set @variable_text_device = N'].deviceid'
    			set @variable_text_id = N'].user_uid'
    
    			-- json Value Setting
    			-- $[@i].id' -> i 번째의 id 값 가져올 수 있음.
    			set @jsonDataUserValue = concat(@variable_text, @i, @variable_text_id) -- $[@i].id'
    			set @jsonDataDeviceValue = concat(@variable_text, @i, @variable_text_device) -- $[@i].device'
                
    			-- testJSON이라는 변수에 설정된 JSON 에서, $[@i].id 값을 가져오겠다는 구문
    			-- json Value Get
    			set @id = JSON_VALUE(@testJSON, @jsonDataUserValue);
    			set @device = JSON_VALUE(@testJSON, @jsonDataDeviceValue);
    
    			-- insert
    			insert into tblTest (deviceid, user_uid) values(@device, @id)
    
    			-- i 증가
    			SET @i = @i + 1
    		END
    end

     

     

    끝.

     

     

    반응형

    'IT > Database' 카테고리의 다른 글

    MySQL - MySQL 서버 접속시 2002 ERROR 이유와 해결방법  (3) 2020.06.02

    댓글

Designed by black7375.