Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

JSON_MODIFY () Ví dụ trong SQL Server (T-SQL)

Trong SQL Server, bạn có thể sử dụng T-SQL JSON_MODIFY() hàm để sửa đổi giá trị của một thuộc tính trong một chuỗi JSON. Hàm trả về chuỗi JSON đã cập nhật.

Cú pháp

Cú pháp như sau:

JSON_MODIFY ( expression , path , newValue )

Ở đâu expression là biểu thức chuỗi JSON, path là đường dẫn đến thuộc tính bạn muốn cập nhật và newValue là giá trị mới để áp dụng cho thuộc tính đó.

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ để chứng minh.

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

Kết quả:

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

Trong ví dụ này:

  • {"Name": "Homer"} là chuỗi JSON ban đầu
  • $.Name là đường dẫn (bắt đầu bằng $. theo sau là đường dẫn đến thuộc tính mà chúng tôi muốn cập nhật).
  • Bart là giá trị mới mà chúng tôi muốn gán cho Name (tức là thay thế giá trị hiện tại)

Ví dụ 2 - Trả lại JSON gốc và đã sửa đổi

Lưu ý rằng JSON_MODIFY() không sửa đổi JSON gốc. Nó cần một bản sao, sau đó sửa đổi và trả lại bản sao.

Dưới đây là một ví dụ để chứng minh điều này:

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';

Kết quả:

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

Ví dụ 3 - Thuộc tính lồng nhau

Đường dẫn có thể sử dụng ký hiệu dấu chấm để tham chiếu các thuộc tính lồng nhau. Đây là một ví dụ.

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';

Kết quả:

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

Vì vậy, chúng ta có thể thấy rằng thành phố đã được thay đổi từ Dunedin tới Timaru .

Ví dụ 4 - Cập nhật các giá trị trong một mảng

Bạn cũng có thể cập nhật các giá trị trong một mảng. Trong ví dụ này, chúng tôi cập nhật một giá trị trong Hobbies mảng.

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';

Kết quả:

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

Vì các mảng sử dụng cách đánh số dựa trên 0, chúng tôi cập nhật mục thứ ba bằng cách tham chiếu Hobbies[2] .

Ví dụ 5 - Nối Giá trị vào Mảng

Trong ví dụ này, chúng tôi thêm một giá trị vào Hobbies mảng. Chúng tôi thực hiện việc này bằng cách thêm append ở đầu đối số đường dẫn.

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';

Kết quả:

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

Ví dụ 6 - Cập nhật một mảng toàn bộ

Trong ví dụ này, tôi cập nhật toàn bộ mảng.

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';

Kết quả:

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

Lưu ý rằng trong ví dụ này, đối số thứ ba được chuyển đến JSON_QUERY() hàm số. Nếu tôi không làm điều này, SQL Server sẽ thoát khỏi dấu ngoặc kép và dấu ngoặc vuông bằng cách sử dụng dấu gạch chéo ngược (\ ) ký tự (và do đó làm rối mảng). Nó sẽ làm điều này vì nó sẽ không biết liệu giá trị được cập nhật là một mảng thực tế hay một chuỗi ký tự.

Vì vậy, để giải quyết vấn đề này, chúng ta có thể sử dụng JSON_QUERY() . Hàm này trả về JSON hợp lệ và SQL Server sau đó sẽ giả định rằng giá trị mới là một mảng.

Đây là những gì sẽ xảy ra nếu chúng tôi đã không đã sử dụng 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';

Kết quả:

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

Vì vậy, SQL Server đã thoát khỏi dấu ngoặc vuông và dấu ngoặc kép.

Ví dụ 7 - Cập nhật Toàn bộ Đối tượng

Dưới đây là một ví dụ về cập nhật toàn bộ đối tượng.

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';

Kết quả:

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

Một lần nữa, nếu chúng tôi chưa sử dụng JSON_QUERY() , chúng tôi sẽ nhận được một chuỗi thoát:

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';

Kết quả:

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

Ví dụ 8 - Đổi tên khóa

Bạn không chỉ bị giới hạn trong việc cập nhật giá trị của thuộc tính, bạn cũng có thể đổi tên khóa của nó. Đây là một ví dụ.

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

Kết quả:

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

Ở đây, chúng tôi lấy giá trị từ thuộc tính hiện có và gán nó vào một cặp khóa / giá trị mới. Sau đó, chúng tôi đặt giá trị của khóa gốc thành NULL (tự động xóa nó).

Để biết thêm ví dụ về đổi tên khóa, hãy xem Cách đổi tên khóa JSON trong 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. Lỗi máy chủ SQL:Dữ liệu chuỗi hoặc nhị phân sẽ bị cắt bớt

  2. Các loại con trỏ máy chủ SQL - Sự khác biệt giữa con trỏ địa phương và toàn cầu là gì | Hướng dẫn sử dụng SQL Server / TSQL

  3. Kiến trúc SQL Server AlwaysOn (Nhóm khả dụng) và Cài đặt từng bước -3 Thất bại thủ công qua các bước

  4. Lưu trữ một tệp trong cơ sở dữ liệu trái ngược với hệ thống tệp?

  5. Thêm thông tin đăng nhập vào máy chủ được liên kết trong SQL Server (Ví dụ T-SQL)