Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Az SQL Server 2016 (13.x) és újabb verziói
Az Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics végpontja a Microsoft Fabric
Warehouse-ban a Microsoft Fabric
SQL Database-ben a Microsoft Fabricben
A JSON_MODIFY szintaxis frissíti egy tulajdonság értékét egy JSON-sztringben, és visszaadja a frissített JSON-sztringet.
Transact-SQL szintaxis konvenciói
Syntax
JSON_MODIFY ( expression , path , newValue )
Arguments
expression
Egy kifejezés. Általában egy JSON-szöveget tartalmazó változó vagy oszlop neve.
JSON_MODIFY hibát ad vissza, ha a kifejezés nem tartalmaz érvényes JSON-t.
path
Egy JSON-elérési út kifejezés, amely megadja a frissíteni kívánt tulajdonságot.
az elérési út szintaxisa a következő:
[append] [ lax | strict ] $.<json path>
append
Nem kötelező módosító, amely meghatározza, hogy az új értéket hozzá kell fűzni a
<json path>által hivatkozott tömbhöz.lax
Megadja, hogy a
<json path>által hivatkozott tulajdonságnak nem kell léteznie. Ha a tulajdonság nem található,JSON_MODIFYmegpróbálja beszúrni az új értéket a megadott elérési útra. A beszúrás sikertelen lehet, ha a tulajdonság nem szúrható be az elérési útra. Ha nem ad meg hasadót vagy szigorúat, akkor a lax az alapértelmezett mód.strict
Megadja, hogy a
<json path>által hivatkozott tulajdonságnak a JSON-kifejezésben kell lennie. Ha a tulajdonság nem található,JSON_MODIFYhibát ad vissza.<json path>Megadja a frissíteni kívánt tulajdonság elérési útját. További információ: JSON Path Expressions.
Az SQL Server 2017-ben (14.x) és az Azure SQL Database-ben megadhat egy változót az elérési út értékeként.
JSON_MODIFYhibát ad vissza, ha az elérési út formátuma érvénytelen.
newValue
Az elérési út által megadott tulajdonság új értéke.
Az új értéknek varchar, nvarchar, char, tinyint, smallint, int, bigint, bit, decimális/ vagy valós/ kell lennie. A szöveges adattípus nem támogatott.
Ha az új érték JSON_MODIFY, NULL törli a megadott kulcsot.
JSON_MODIFY Az új érték összes speciális karakterét feloldja, ha az érték típusa varchar vagy nvarchar. A szöveges érték nem szökik meg, ha az FOR JSON, JSON_QUERYvagy JSON_MODIFYáltal előállított, megfelelően formázott JSON.
Visszaadott érték
A kifejezés frissített értékét adja vissza megfelelően formázott JSON-szövegként.
Remarks
A JSON_MODIFY függvény lehetővé teszi egy meglévő tulajdonság értékének frissítését, egy új kulcs:érték pár beszúrását, vagy egy kulcs törlését a módok és a megadott értékek kombinációja alapján.
Az alábbi táblázat a JSON_MODIFY viselkedését hasonlítja össze laza módban és szigorú módban. Az opcionális elérésiút-mód specifikációjáról (lax vagy szigorú) további információt a JSON-elérésiút-kifejezésekben talál.
| Új érték | Az út létezik | Lax mód | Szigorú mód |
|---|---|---|---|
NOT NULL |
Yes | Frissítse a meglévő értéket. | Frissítse a meglévő értéket. |
NOT NULL |
No | Próbáljon meg létrehozni egy új kulcs-érték párot a megadott útvonalon. Ez sikertelen lehet. Ha például megadja az elérési utat $.user.setting.theme, JSON_MODIFY nem szúrja be a kulcsot theme, ha a $.user vagy $.user.settings objektumok nem léteznek, vagy ha a beállítások tömb vagy skaláris érték. |
Hiba – INVALID_PROPERTY |
NULL |
Yes | Törölje a meglévő tulajdonságot. | Állítsa a meglévő értéket null értékre. |
NULL |
No | Nincs művelet. Az első argumentum eredményként lesz visszaadva. | Hiba – INVALID_PROPERTY |
Lax módban JSON_MODIFY megpróbál létrehozni egy új kulcs:érték párot, de bizonyos esetekben sikertelen lehet.
A JSON-függvények ugyanúgy működnek, függetlenül attól, hogy a JSON-dokumentum varcharban, nvarcharban vagy natív JSON-adattípusban van tárolva.
Examples
A. Alapszintű műveletek
Az alábbi példa jSON-szöveggel elvégezhető alapműveleteket mutat be.
DECLARE @info NVARCHAR(100) = '{"name":"John","skills":["C#","SQL"]}';
PRINT @info;
-- Update name
SET @info = JSON_MODIFY(@info, '$.name', 'Mike');
PRINT @info;
-- Insert surname
SET @info = JSON_MODIFY(@info, '$.surname', 'Smith');
PRINT @info;
-- Set name NULL
SET @info = JSON_MODIFY(@info, 'strict $.name', NULL);
PRINT @info;
-- Delete name
SET @info = JSON_MODIFY(@info, '$.name', NULL);
PRINT @info;
-- Add skill
SET @info = JSON_MODIFY(@info, 'append $.skills', 'Azure');
PRINT @info;
Itt van az eredményhalmaz.
{
"name": "John",
"skills": ["C#", "SQL"]
} {
"name": "Mike",
"skills": ["C#", "SQL"]
} {
"name": "Mike",
"skills": ["C#", "SQL"],
"surname": "Smith"
} {
"skills": ["C#", "SQL"],
"surname": "Smith"
} {
"skills": ["C#", "SQL", "Azure"],
"surname": "Smith"
}
B. Többszörös frissítés
A JSON_MODIFYcsak egy tulajdonságot frissíthet. Ha több frissítést kell végrehajtania, több JSON_MODIFY hívást is használhat.
DECLARE @info NVARCHAR(100) = '{"name":"John","skills":["C#","SQL"]}';
PRINT @info;
-- Multiple updates
SET @info = JSON_MODIFY(JSON_MODIFY(JSON_MODIFY(@info, '$.name', 'Mike'), '$.surname', 'Smith'), 'append $.skills', 'Azure');
PRINT @info;
Itt van az eredményhalmaz.
{
"name": "John",
"skills": ["C#", "SQL"]
} {
"name": "Mike",
"skills": ["C#", "SQL", "Azure"],
"surname": "Smith"
}
C. Kulcs átnevezése
Az alábbi példa bemutatja, hogyan nevezhet át egy tulajdonságot JSON-szövegben a JSON_MODIFY függvénnyel. Először felveheti egy meglévő tulajdonság értékét, és beszúrhatja új kulcs:érték párként. Ezután törölheti a régi kulcsot, ha a régi tulajdonság értékét NULLértékre állítja.
DECLARE @product NVARCHAR(100) = '{"price":49.99}';
PRINT @product;
-- Rename property
SET @product = JSON_MODIFY(JSON_MODIFY(@product, '$.Price', CAST(JSON_VALUE(@product, '$.price') AS NUMERIC(4, 2))), '$.price', NULL);
PRINT @product;
Itt van az eredményhalmaz.
{
"price": 49.99
} {
"Price": 49.99
}
Ha az új értéket nem numerikus típusra veti, JSON_MODIFY szövegként kezeli, és dupla idézőjelekkel veszi körül.
D. Érték növelése
Az alábbi példa bemutatja, hogyan növelheti egy tulajdonság értékét JSON-szövegben a JSON_MODIFY függvénnyel. Először felveheti a meglévő tulajdonság értékét, és beszúrhatja új kulcs:érték párként. Ezután törölheti a régi kulcsot, ha a régi tulajdonság értékét NULLértékre állítja.
DECLARE @stats NVARCHAR(100) = '{"click_count": 173}';
PRINT @stats;
-- Increment value
SET @stats = JSON_MODIFY(@stats, '$.click_count', CAST(JSON_VALUE(@stats, '$.click_count') AS INT) + 1);
PRINT @stats;
Itt van az eredményhalmaz.
{
"click_count": 173
} {
"click_count": 174
}
E. JSON-objektum módosítása
JSON_MODIFY a newValue argumentumot egyszerű szövegként kezeli akkor is, ha megfelelően formázott JSON-szöveget tartalmaz. Ennek eredményeképpen a függvény JSON-kimenete kettős idézőjelekkel van körülvéve, és az összes speciális karakter megmenekül, ahogy az alábbi példában is látható.
DECLARE @info NVARCHAR(100) = '{"name":"John","skills":["C#","SQL"]}';
PRINT @info;
-- Update skills array
SET @info = JSON_MODIFY(@info, '$.skills', '["C#","T-SQL","Azure"]');
PRINT @info;
Itt van az eredményhalmaz.
{
"name": "John",
"skills": ["C#", "SQL"]
} {
"name": "John",
"skills": "[\"C#\",\"T-SQL\",\"Azure\"]"
}
Az automatikus menekülés elkerülése érdekében adja meg a newValue értéket a JSON_QUERY függvény használatával.
JSON_MODIFY tudja, hogy a JSON_QUERY által visszaadott érték megfelelően formázott JSON, így nem kerüli el az értéket.
DECLARE @info NVARCHAR(100) = '{"name":"John","skills":["C#","SQL"]}';
PRINT @info;
-- Update skills array
SET @info = JSON_MODIFY(@info, '$.skills', JSON_QUERY('["C#","T-SQL","Azure"]'));
PRINT @info;
Itt van az eredményhalmaz.
{
"name": "John",
"skills": ["C#", "SQL"]
} {
"name": "John",
"skills": ["C#", "T-SQL", "Azure"]
}
F. JSON-oszlop frissítése
Az alábbi példa egy JSON-t tartalmazó táblaoszlopban lévő tulajdonság értékét frissíti.
UPDATE Employee
SET jsonCol = JSON_MODIFY(jsonCol, '$.info.address.town', 'London')
WHERE EmployeeID = 17;
Kapcsolódó tartalom
- JSON-elérési út kifejezései
- JSON-adatok AZ SQL Server