Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

JSON_MODIFY() Contoh di SQL Server (T-SQL)

Di SQL Server, Anda dapat menggunakan T-SQL JSON_MODIFY() berfungsi untuk mengubah nilai properti dalam string JSON. Fungsi mengembalikan string JSON yang diperbarui.

Sintaks

Sintaksnya seperti ini:

JSON_MODIFY ( expression , path , newValue )

Dimana expression adalah ekspresi string JSON, path adalah jalur ke properti yang ingin Anda perbarui, dan newValue adalah nilai baru untuk diterapkan ke properti itu.

Contoh  1 – Penggunaan Dasar

Berikut ini contoh untuk didemonstrasikan.

SELECT JSON_MODIFY('{"Name": "Homer"}', '$.Name', 'Bart') AS 'Result';

Hasil:

+------------------+
| Result           |
|------------------|
| {"Name": "Bart"} |
+------------------+

Dalam contoh ini:

  • {"Name": "Homer"} adalah string JSON asli
  • $.Name adalah jalurnya (ini dimulai dengan $. diikuti dengan jalur ke properti yang ingin kami perbarui).
  • Bart adalah nilai baru yang ingin kita tetapkan ke Name (yaitu untuk mengganti nilai saat ini)

Contoh 2 – Mengembalikan JSON Asli dan Modifikasi

Perhatikan bahwa JSON_MODIFY() tidak mengubah JSON asli. Dibutuhkan salinan, lalu memodifikasi dan mengembalikan salinan.

Berikut ini contoh untuk menunjukkannya:

DECLARE @suspect NVARCHAR(4000)
SET @suspect= '{"Name": "Homer"}'
SELECT 
  @suspect AS 'Original String',
  JSON_MODIFY(@suspect, '$.Name', 'Bart') AS 'Modified String',
  @suspect AS 'Original String';

Hasil:

+-------------------+-------------------+-------------------+
| Original String   | Modified String   | Original String   |
|-------------------+-------------------+-------------------|
| {"Name": "Homer"} | {"Name": "Bart"}  | {"Name": "Homer"} |
+-------------------+-------------------+-------------------+

Contoh 3 – Properti Bersarang

Jalur dapat menggunakan notasi titik untuk mereferensikan properti bersarang. Ini contohnya.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Address.City', 'Timaru') AS 'Modified Array';

Hasil:

+------------------+
| Modified Array   |
|------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Timaru",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }                  |
+------------------+

Jadi kita dapat melihat bahwa kota telah diubah dari Dunedin ke Timaru .

Contoh 4 – Memperbarui Nilai dalam Array

Anda juga dapat memperbarui nilai dalam array. Dalam contoh ini, kami memperbarui nilai di Hobbies larik.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Hobbies[2]', 'Brain Surgery') AS 'Updated Hobbies';

Hasil:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Brain Surgery"]  
    }
 }                   |
+-------------------+

Melihat array menggunakan penomoran berbasis nol, kami memperbarui item ketiga dengan merujuk Hobbies[2] .

Contoh 5 – Menambahkan Nilai ke Array

Dalam contoh ini, kami menambahkan nilai ke Hobbies Himpunan. Kami melakukan ini dengan menambahkan append di awal argumen jalur.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'append $.Suspect.Hobbies', 'Brain Surgery') AS 'Updated Hobbies';

Hasil:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping","Brain Surgery"]  
    }
 }                   |
+-------------------+

Contoh 6 – Perbarui Seluruh Array

Dalam contoh ini, saya memperbarui seluruh array.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Hobbies', JSON_QUERY('["Chess", "Brain Surgery"]')) AS 'Updated Hobbies';

Hasil:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Chess", "Brain Surgery"]  
    }
 }                   |
+-------------------+

Perhatikan bahwa dalam contoh ini, argumen ketiga diteruskan ke JSON_QUERY() fungsi. Jika saya tidak melakukan ini, SQL Server akan lolos dari tanda kutip ganda dan tanda kurung siku menggunakan garis miring terbalik (\ ) karakter (dan karenanya mengacaukan array). Itu akan melakukan ini karena tidak akan tahu apakah nilai yang diperbarui adalah array yang sebenarnya, atau string literal.

Jadi untuk menyiasatinya, kita bisa menggunakan JSON_QUERY() . Fungsi ini mengembalikan JSON yang valid, dan SQL Server kemudian akan menganggap bahwa nilai baru adalah array.

Inilah yang akan terjadi jika kita tidak menggunakan JSON_QUERY() :

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Hobbies', '["Chess", "Brain Surgery"]') AS 'Updated Hobbies';

Hasil:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": "[\"Chess\", \"Brain Surgery\"]"  
    }
 }                   |
+-------------------+

Jadi SQL Server telah lolos dari tanda kurung siku dan tanda kutip ganda.

Contoh 7 – Perbarui Seluruh Objek

Berikut ini contoh memperbarui seluruh objek.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect', JSON_QUERY('{"Name": "Peter Griffin", "Hobbies": "None"}')) AS 'Updated Object';

Hasil:

+------------------+
| Updated Object   |
|------------------|
| {  
    "Suspect": {"Name": "Peter Griffin", "Hobbies": "None"}
 }                  |
+------------------+

Sekali lagi, jika kita tidak menggunakan JSON_QUERY() , kami akan menerima string yang lolos:

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect', '{"Name": "Peter Griffin", "Hobbies": "None"}') AS 'Updated Object';

Hasil:

+------------------+
| Updated Object   |
|------------------|
| {  
    "Suspect": "{\"Name\": \"Peter Griffin\", \"Hobbies\": \"None\"}"
 }                  |
+------------------+

Contoh 8 – Ganti Nama Kunci

Anda tidak hanya terbatas pada memperbarui nilai properti, Anda juga dapat mengganti nama kuncinya. Ini contohnya.

DECLARE @data NVARCHAR(50)='{"Name":"Homer"}'
PRINT @data

-- Rename the key
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')),
  '$.Name',
  NULL
 )
PRINT @data

Hasil:

{"Name":"Homer"}
{"Handle":"Homer"} 

Di sini, kami mengambil nilai dari properti yang ada dan menetapkannya ke pasangan kunci/nilai baru. Kami kemudian menetapkan nilai kunci asli ke NULL (yang secara otomatis menghapusnya).

Untuk contoh lebih lanjut tentang mengganti nama kunci, lihat Cara Mengganti Nama Kunci JSON di SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Log Transaksi SQL Server — Bagian 1

  2. INSERT INTO @TABLE EXEC @query dengan SQL Server 2000

  3. Cara Menampilkan Kolasi Database di SQL Server (T-SQL)

  4. SQL Server Konversi Varchar ke Datetime

  5. Apakah ada .NET yang setara dengan newsequentialid() SQL Server ()