sql >> データベース >  >> RDS >> Sqlserver

SQLServerのJSON

    JSON( J ava S クリプトO bject N otation)は、特にRESTAPIでデータを交換するための非常に人気のある標準です。最近のほとんどすべてのWebサイト、AndroidまたはiOSアプリは、サーバーとのデータ交換にこれを使用しています。 SQL Server 2016から、Microsoftはいくつかの組み込み関数を介してJSONのサポートを拡張します。このようにして、SQLServerは従来のリレーショナルデータベースのNOSQL機能をサポートします。調べてみましょう:

    • ISJSON –文字列が有効なJSONであるかどうかを調べます
    • JSON_VALUE –JSON文字列から値を取得します
    • JSON_QUERY –JSON文字列からオブジェクトまたは配列をフェッチします
    • JSON_MODIFY –更新されたJSON文字列を返します
    • OPENJSON – JSONテキストを解析し、JSON入力からオブジェクトとプロパティを行と列として返します
    • FOR JSON句–SQLデータをJSON形式にエクスポートします

    ISJSON関数

    DECLARE @json NVARCHAR(MAX); 
    SET @json = N'{
    "info":[
    {
    "id":"1",
    "name":"Robert Aragon",
    "ssn":"489-36-8350",
    "credit_card":[
    "4929-3813-3266-4295",
    "5370-4638-8881-3020"
    ],
    "address":{
    "town":"Avon",
    "area":"New York",
    "zipcode":"76148"
    }
    },
    {
    "id":"2",
    "name":"Thomas Conley",
    "ssn":"690-05-5315",
    "credit_card":[
    "5299-1561-5689-1938"
    ],
    "address":{
    "town":"Jackson Street",
    "area":"New York",
    "zipcode":"80233"
    }
    },
    {
    "id":"3",
    "name":"Susan Davis",
    "ssn":"421-37-1396",
    "credit_card":[
    "5293-8502-0071-3058"
    ],
    "address":{
    "town":"Rock Beach",
    "area":"Los angeles",
    "zipcode":"900341"
    }
    },
    {
    "id":"4",
    "name":"Christopher Diaz",
    "ssn":"458-02-6124",
    "credit_card":[
    "5548-0246-6336-5664"
    ],
    "address":{
    "town":"Small town",
    "area":"Wasshington",
    "zipcode":"63126"
    }
    },
    {
    "id":"5",
    "name":"Rick Edwards",
    "ssn":"612-20-6832",
    "credit_card":[
    "4539-5385-7425-5825"
    ],
    "address":{
    "town":"Free Town",
    "area":"Utah",
    "zipcode":"97222"
    }
    },
    {
    "id":"6",
    "name":"Victor Faulkner",
    "ssn":"300-62-3266",
    "credit_card":[
    "4916-9766-5240-6147",
    "4532-4220-6922-9909",
    "5218-0144-2703-9266"
    ],
    "address":{
    "town":"Dakota",
    "area":"North Dakota",
    "zipcode":"92104"
    }
    }
    ]
    }
    '; 
    SELECT ISJSON(@json);

    出力

    1 -- 1 if it is a valid JSON otherwise 0

    JSON_VALUE関数

    この関数は、JSON文字列からスカラー値を取得するために使用されます。構文は

    JSON_VALUE(expression, path)

    JSONテキストを含む変数または列の名前であり、抽出するプロパティです。たとえば、上記のJSON文字列に対して以下のステートメントを実行すると、以下の出力が生成されます:

    SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')

    出力

    5548-0246-6336-5664

    JSON_VALUE関数は、タイプnvarchar(4000)の単一のテキスト値を返します。 nullを返します 指定されたパスがJSONオブジェクトに見つからない場合、または値がnvarchar(4000)を超えている場合。 「strict」を使用する 指定されたパスがJSONオブジェクトで使用できない場合、パスの前の‘キーワードはエラーをスローします。

    JSON_QUERY関数

    JSON_QUERY(expression [、path])関数は、JSONテキストを含む変数または列の名前と、引数として抽出するオブジェクトまたは配列を指定するJSONパスを取ります。

    出力

    タイプnvarchar(max)のJSONフラグメントを返します 。 JSON_VALUE関数と同様に、指定された値がオブジェクトまたは配列でない場合、nullを返します。 「strict」キーワードを使用すると、エラーがスローされます。

    JSON_MODIFY関数

    JSON文字列のプロパティの値を更新し、更新されたJSON文字列を返します。引数として式、パス、および新規を取ります。この関数を使用して、JSON文字列に対して以下の操作を実行できます。

    1. 更新
    2. 挿入
    3. 削除
    4. 追加
    1。更新

    指定されたパスの値を更新します。

    SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')

    出力

    2。挿入

    指定されたパスの属性が存在しない場合、JSON文字列に新しい値が追加されます。それ以外の場合は、上記の例のように既存の値を更新します。新しい属性はJSONの最後に追加されます。

    SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')

    出力

    3。削除

    パスにNULL値を入れると、それが削除されるだけです。

    SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)

    出力

    4。追加

    新しい要素は、次のように配列に追加できます:

    SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')

    出力

    OPENJSON関数

    これは、JSONテキストを解析し、JSON入力からオブジェクトとプロパティを行と列として返すテーブル値関数です。

    DECLARE @json NVARCHAR(MAX);
    SET @json =
    N'{"id":"1", "name": "Robert Aragon", "ssn": "489-36-8350",
    "credit_card":["4929-3813-3266-4295","5370-4638-8881-3020"], "address":
    {"town": "Avon", "area": "New York", "zipcode": "76148"}}';
    SELECT * FROM OpenJson(@json)
    with (
        id int  '$.id',
        name varchar(50) '$.name',
        ssn varchar(50) '$.ssn',
        [credit_card] nvarchar(MAX)  AS JSON,
        [address] nvarchar(MAX)  AS JSON
    )

    出力

    JSON句の場合

    この句は、SQLテーブルデータをJSON形式にエクスポートするためにTSQLで広く使用されています。 2つのバリエーションがあります:

    • AUTO –デフォルトのJSON出力はAUTOオプションを使用して生成されます。
    • PATH – JSONの構造は、PATHオプションを使用して列名またはエイリアスで変更できます
    IF OBJECT_ID('Test1', 'U') IS NOT NULL
        DROP TABLE Test1;
    GO
    
    -- Create the table 
    CREATE TABLE Test1( 
        pk_id    int not null identity(1,1), 
        name    varchar(10) default ('Mehedi') 
    ) 
     GO 
     -- Populate with 3 sample data 
     INSERT INTO Test1 default values
    GO 2
    IF OBJECT_ID('Test2', 'U') IS NOT NULL
        DROP TABLE Test2;
    GO
    -- Create the table
    CREATE TABLE Test2(
        pk_id    int not null identity(1,1),
        area    varchar(10) default ('Dhanmondi'),
        city    varchar(10) default ('Dhaka')
    )
    GO
    -- Populate with 3 sample data
    INSERT INTO Test2 default values
    GO 1
    -- Example of AUTO
    SELECT A.pk_id, A.name, (SELECT pk_id, area, city
        FROM Test2 B
        WHERE A.pk_id = B.pk_id
        FOR JSON AUTO
        ) as test2
    FROM Test1 A
    FOR JSON AUTO
    -- Example of PATH
    SELECT A.pk_id, A.name, (SELECT pk_id as id, area, city
        FROM Test2 B
        WHERE A.pk_id = B.pk_id
        FOR JSON AUTO
        ) as test2
    FROM Test1 A
    FOR JSON PATH , ROOT ('EmployeeInfo')
    GO
    

    出力

    結論

    これはすべてSQLServerのJSONに関するものです。ハッピーTSQLing!

    この記事は私のブログから抜粋したものです。


    1. MySQLの列の一部の値に先行ゼロを追加する

    2. データセットが変更されたときにSqlDependencyがOnChangeイベントを発生させない

    3. SQLパフォーマンス:WHEREとWHERE(ROW_NUMBER)

    4. Read Committedは、Postgres互換の分散SQLデータベースには必須です