MSSQL 에서 JSON 데이터를 수정하는 방법입니다.
DROP TABLE dbo.Logs
create table dbo.Logs (
_id bigint primary key identity,
log nvarchar(max),
dumy1 AS JSON_VALUE(log, '$.DUMY2'),
index ix_severity (dumy1)
);
/*
경고! 비클러스터형 인덱스에 대한 최대 키 길이는 1700바이트입니다.
인덱스 'ix_severity'의 최대 길이는 8000바이트입니다.
큰 값을 조합한 일부 경우에는 삽입/업데이트 작업을 수행할 수 없습니다.
*/
DECLARE @vJson AS NVARCHAR(MAX)
SET @vJson = (SELECT top 100000 * FROM TEST1M FOR JSON AUTO)
INSERT INTO dbo.Logs(LOG)
SELECT VALUE FROM OPENJSON(@vJson)
update statistics dbo.Logs
declare @DUMY1 nvarchar(10) = 'E3'
SELECT TOP 100 * fROM dbo.Logs WHERE dumy1 = @DUMY1
SELECT TOP 100 * fROM dbo.Logs WHERE JSON_VALUE(log, '$.DUMY2') = @DUMY1
dumy1, JSON_VALUE(log, '$.DUMY2') 2가지 쿼리 모두 인덱스 사용이 가능하다.
특정 노드의 데이터 수정이 가능하다.
CREATE PROCEDURE dbo.UpdateData(@Id int, @Property nvarchar(100), @Value nvarchar(100))
--WITH SCHEMABINDING, NATIVE_COMPILATION
AS BEGIN
--ATOMIC WITH (transaction isolation level = snapshot, language = N'English')
UPDATE dbo.Logs
SET log = JSON_MODIFY(log, @Property, @Value)
WHERE _id = @Id;
END
exec dbo.UpdateData @Id=1, @Property='$.DUMY2',@Value='A1'
select * from dbo.Logs
'SQL Server' 카테고리의 다른 글
SQL Server JSON 함수(Transact-SQL) (0) | 2023.01.11 |
---|---|
SQL Server 통계 Stream 생성 샘플 쿼리 (0) | 2023.01.10 |
dmv 에서 고부하 쿼리 찾기 (0) | 2023.01.06 |
SQL Server 테이블 정보 조회(sp_help / sp_column) (0) | 2023.01.06 |
SQL Server 정규식(clr) (0) | 2023.01.06 |