IT’s Ha

[MS-SQL] Stored Procedure Array 변수 지정 본문

SQL/MS-SQL

[MS-SQL] Stored Procedure Array 변수 지정

Deleloper Ha 2023. 2. 20. 16:01
728x90
반응형

안녕하세요.

MSSQL에서 Sotred Procedure 사용시 Array를 통하여 데이터 처리 방식에 대해서 공유하려고 합니다.

먼저, 해당 MSSQL의 서버 버전에 따라 사용방식이 조금 다릅니다. 

SQL Server 2016 이상과 이하에 따라 사용방법을 설명 드리겠습니다.

그전에 자신의 버전을 모르신다면 버전 확인 방법은 아래와 같습니다.

SELECT @@VERSION

MSSQL 버전 확인 예시

SELECT @@VERSION을 사용하시면 해당 서버의 버전을 확인 하실 수 있습니다.

1. SQL Server 2016 이상 버전

첫번째,  STRING_SPLIT 내장 함수 사용입니다.

SELECT value FROM STRING_SPLIT('1,2,3,4', ',');

위와 같이 출력하면 아래와 같은 결과 값을 확인 하실 수 있습니다.

출력 결과

두번재, OPENJSON 내장 함수 사용 Json으로 처리하여 결과 값을 내보내는 방법입니다.

SELECT value FROM OPENJSON(CONCAT('["', REPLACE(STRING_ESCAPE('1,2,3,4', 'JSON'), ',', '","'), '"]')) ;

결과는 위와 동일합니다.

2. SQL Server 2016 이전 버전

XML로 변환하여 파싱하는방법입니다.

CREATE FUNCTION [dbo].[FNT_STRING_SPLIT]
(
    @IN_PARAMS          NVARCHAR(MAX)               
)
RETURNS TABLE AS RETURN
(
    SELECT Split.a.value('.', 'NVARCHAR(MAX)') DATA
      FROM
      (
          SELECT CAST('<X>'+REPLACE(@IN_PARAMS, ',', '</X><X>')+'</X>' AS XML) AS String
      ) AS A
      CROSS APPLY String.nodes('/X') AS Split(a)
)

첫번째로, 위와 같이 테이블 변환 함수를 생성합니다.

그리고 선언한 함수를 실행합니다.

SELECT  * FROM FNT_STRING_SPLIT('1,2,3')

출력 결과

실행하면 위와같이 결과가 나옵니다.

위에 대한 내용으로 여러개의 정보를 선택하여 데이터베이스로 넘겨 정보를 조회 가능합니다.

SELECT * FROM STUDENT WHERE 1=1 AND STD_ID IN(SELECT * FROM FNT(STRING_SPLIT('1,2,3'));

예를 들어 위와같이 쿼리를 작성하여 정보를 가져 올 수 있습니다.

728x90
반응형

'SQL > MS-SQL' 카테고리의 다른 글

[MS-SQL]날짜 형식 포맷(CONVERT)  (0) 2023.02.24
[MS-SQL] MSSQL 설치 - Windows  (0) 2023.02.23
[MS-SQL] Procedure내 테이블 사용 조회  (0) 2023.01.18
[MS-SQL] Lock 회피  (0) 2023.01.18
[MS-SQL] 테이블 정보 조회  (0) 2023.01.03
Comments