블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

최근에 올라온 글

IF OBJECT_ID('TBLX') IS NOT NULL

DROP TABLE TBLX

GO


CREATE TABLE TBLX (

    C1 VARCHAR(100), 

    CJSON NVARCHAR(MAX) CHECK ( ISJSON ( CJSON ) = 1 ) 

)

GO


;WITH CTE_P AS 

(

SELECT DISTINCT LASTWAITTYPE 

FROM MASTER.DBO.SYSPROCESSES 

)

INSERT INTO TBLX (C1, CJSON) 

SELECT 

LASTWAITTYPE 

, SYSPROCESSESJSON =

(

SELECT SPID, KPID, WAITTYPE

FROM MASTER.DBO.SYSPROCESSES C

WHERE P.LASTWAITTYPE = C.LASTWAITTYPE

FOR JSON AUTO

)

FROM CTE_P P

GO


UPDATE TBLX 

SET CJSON = '[{"SPID":6,"KPID":10348,"WAITTYPE":"AKW="},{"SPID":15,"WAITTYPE":"AKW="}]'

WHERE C1 = 'LAZYWRITER_SLEEP'


SELECT * 

FROM TBLX A

CROSS APPLY OPENJSON (CJSON)

WITH (

   SPID BIGINT

   , KPID BIGINT

   , WAITTYPE VARCHAR(100)

) AS J







https://sqlwithmanoj.com/2015/06/01/exportconvert-table-or-sql-query-data-to-json-string-format-sql-server-2016-part-1/


을 시작으로 죽 읽어보면 도움이 많이 된다. 



multi row 일 경우 json 컬럼에 인덱스를 만들수 없다. 

index 는 그냥 computed column 에 일반 인덱스를 만들 뿐이다. 



escape character 


static string EscapeForJson(string s) {
  string quoted = System.Web.Helpers.Json.Encode(s)
  return quoted.Substring(1, quoted.Length - 2);
}


 public static string cleanForJSON(string s)
    {
        if (s == null || s.Length == 0) {
            return "";
        }

        char         c = '\0';
        int          i;
        int          len = s.Length;
        StringBuilder sb = new StringBuilder(len + 4);
        String       t;

        for (i = 0; i < len; i += 1) {
            c = s[i];
            switch (c) {
                case '\\':
                case '"':
                    sb.Append('\\');
                    sb.Append(c);
                    break;
                case '/':
                    sb.Append('\\');
                    sb.Append(c);
                    break;
                case '\b':
                    sb.Append("\\b");
                    break;
                case '\t':
                    sb.Append("\\t");
                    break;
                case '\n':
                    sb.Append("\\n");
                    break;
                case '\f':
                    sb.Append("\\f");
                    break;
                case '\r':
                    sb.Append("\\r");
                    break;
                default:
                    if (c < ' ') {
                        t = "000" + String.Format("X", c);
                        sb.Append("\\u" + t.Substring(t.Length - 4));
                    } else {
                        sb.Append(c);
                    }
                    break;
            }
        }
        return sb.ToString();
    }





-- 대소문자 가림


IF OBJECT_ID ('CUSTOMER') IS NOT NULL

DROP TABLE CUSTOMER

GO



CREATE TABLE DBO.CUSTOMER( 

    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,

    NAME NVARCHAR(50), DETAIL NVARCHAR(MAX))

GO

INSERT INTO DBO.CUSTOMER ( NAME, DETAIL )

SELECT TOP 200000 NEWID(),

 REPLACE('{"ADDRESS":{"STATE":"KA","COUNTRY":"INDIA"},

 "PHONE":"@PHONE"}',

 '@PHONE', 100000000-ROW_NUMBER() OVER (ORDER BY SC1.OBJECT_ID))

FROM SYS.ALL_COLUMNS SC1

        CROSS JOIN SYS.ALL_COLUMNS SC2

GO 


SET STATISTICS IO ON 

GO


SELECT *

FROM DBO.CUSTOMER

WHERE JSON_VALUE(DETAIL,'$.PHONE') = '99890000'



ALTER TABLE DBO.CUSTOMER

ADD PHONENUMBER AS JSON_VALUE(DETAIL,'$.PHONE')


SELECT TOP 10 * FROM DBO.CUSTOMER 


CREATE INDEX IX_CUSTOMER_PHONENUMBER

 ON DBO.CUSTOMER(PHONENUMBER)

GO

 

SELECT *

FROM DBO.CUSTOMER

WHERE JSON_VALUE(DETAIL,'$.PHONE') = '99890000'

GO


--(1개 행이 영향을 받음)

--테이블 'CUSTOMER'. 검색 수 1, 논리적 읽기 수 6, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.


SELECT * FROM CUSTOMER WHERE PHONENUMBER = '99890000'

GO


--(1개 행이 영향을 받음)

--테이블 'CUSTOMER'. 검색 수 1, 논리적 읽기 수 6, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.



select switchoffset (ctime, '+09:00') ctime, ceventname, j.wait_type, j.duration, j.batch_text, j.statement, j.current_state, cjsondata

from txelog a

cross apply openjson (cjsondata)

with (

   duration bigint

   , batch_text varchar(max) 

   , statement varchar(max)

   , wait_type varchar(100)

   , current_state varchar(100)

) as j

order by cTime desc 

Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함