Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

JSON_MODIFY() Przykłady w SQL Server (T-SQL)

W SQL Server możesz użyć T-SQL JSON_MODIFY() funkcja do modyfikowania wartości właściwości w ciągu JSON. Funkcja zwraca zaktualizowany ciąg JSON.

Składnia

Składnia wygląda tak:

JSON_MODIFY ( expression , path , newValue )

Gdzie expression jest wyrażeniem ciągu JSON, path to ścieżka do właściwości, którą chcesz zaktualizować, a newValue to nowa wartość do zastosowania do tej właściwości.

Przykład 1 – Podstawowe użycie

Oto przykład do zademonstrowania.

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

Wynik:

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

W tym przykładzie:

  • {"Name": "Homer"} jest oryginalnym ciągiem JSON
  • $.Name jest ścieżką (zaczyna się od $. po której następuje ścieżka do właściwości, którą chcemy zaktualizować).
  • Bart to nowa wartość, którą chcemy przypisać do Name (tj. zastąpić bieżącą wartość)

Przykład 2 – Zwróć oryginalny i zmodyfikowany JSON

Zauważ, że JSON_MODIFY() nie modyfikuje oryginalnego JSON. Pobiera kopię, a następnie modyfikuje i zwraca kopię.

Oto przykład, który to zademonstruje:

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

Wynik:

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

Przykład 3 – Właściwości zagnieżdżone

Ścieżka może używać notacji kropkowej do odwoływania się do zagnieżdżonych właściwości. Oto przykład.

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

Wynik:

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

Widzimy więc, że miasto zostało zmienione z Dunedin do Timaru .

Przykład 4 – Aktualizacja wartości w tablicy

Możesz także aktualizować wartości w tablicy. W tym przykładzie aktualizujemy wartość w Hobbies tablica.

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

Wynik:

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

Ponieważ tablice używają numeracji od zera, aktualizujemy trzeci element, odwołując się do Hobbies[2] .

Przykład 5 – Dołącz wartość do tablicy

W tym przykładzie dodajemy wartość do Hobbies szyk. Robimy to, dodając append na początku argumentu ścieżki.

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

Wynik:

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

Przykład 6 – Aktualizacja całej tablicy

W tym przykładzie aktualizuję całą tablicę.

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

Wynik:

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

Zauważ, że w tym przykładzie trzeci argument jest przekazywany do JSON_QUERY() funkcjonować. Gdybym tego nie zrobił, SQL Server uniknąłby podwójnego cudzysłowu i nawiasów kwadratowych za pomocą odwrotnego ukośnika (\ ) znak (a tym samym psuje tablicę). Zrobiłby to, ponieważ nie wiedziałby, czy zaktualizowana wartość jest rzeczywistą tablicą, czy literałem ciągu.

Aby obejść ten problem, możemy użyć JSON_QUERY() . Ta funkcja zwraca poprawny JSON, a SQL Server przyjmie wtedy, że nowa wartość jest tablicą.

Oto, co by się stało, gdybyśmy nie użyto 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';

Wynik:

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

Tak więc SQL Server ominął nawiasy kwadratowe i podwójne cudzysłowy.

Przykład 7 – Aktualizacja całego obiektu

Oto przykład aktualizacji całego obiektu.

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

Wynik:

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

Ponownie, gdybyśmy nie użyli JSON_QUERY() , otrzymalibyśmy łańcuch ze znakami ucieczki:

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

Wynik:

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

Przykład 8 – Zmień nazwę klucza

Nie ograniczasz się tylko do aktualizowania wartości właściwości, możesz również zmienić nazwę jej klucza. Oto przykład.

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

Wynik:

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

Tutaj pobieramy wartość z istniejącej właściwości i przypisujemy ją do nowej pary klucz/wartość. Następnie ustawiamy wartość oryginalnego klucza na NULL (co automatycznie go usuwa).

Aby uzyskać więcej przykładów zmiany nazwy klucza, zobacz Jak zmienić nazwę klucza JSON w 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. Używanie Excel VBA do uruchamiania zapytania SQL

  2. przekonwertuj numer seryjny daty Excel na zwykłą datę

  3. Łączenie się z SQL Server 2012 przy użyciu sqlalchemy i pyodbc

  4. Użyj instrukcji Create, aby utworzyć tabelę w SQL Server — SQL Server / T-SQL Tutorial, część 34

  5. Ustaw domyślny profil publiczny dla poczty bazy danych (SSMS)