Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (yalnızca sunucusuz SQL havuzu)
Microsoft Fabric'te SQL analitik uç noktası
Microsoft Fabric'te depo veritabanı
Microsoft Fabric'te SQL veritabanı
OPENJSON satır kümesi işlevi, JSON metnini bir satır ve sütun kümesine dönüştürür. JSON koleksiyonunu OPENJSONile bir satır kümesine dönüştürdükten sonra, döndürülen verilerde herhangi bir SQL sorgusu çalıştırabilir veya bir SQL Server tablosuna ekleyebilirsiniz. SQL Server Veritabanı Altyapısı'nda JSON verileriyle çalışmak hakkında daha fazla bilgi için bkz. SQL Server'da JSON verileri.
OPENJSON işlevi tek bir JSON nesnesi veya JSON nesneleri koleksiyonu alır ve bunları bir veya daha fazla satıra dönüştürür. varsayılan olarak, OPENJSON işlevi aşağıdaki verileri döndürür:
- JSON nesnesinden işlev, ilk düzeyde bulduğu tüm anahtar/değer çiftlerini döndürür.
- JSON dizisinden işlevi dizinin tüm öğelerini dizinleriyle birlikte döndürür.
Çıkışın yapısını açıkça tanımlayan bir şema sağlamak için isteğe bağlı bir WITH yan tümcesi ekleyebilirsiniz.
OPENJSON'in varsayılan çıktısı ile
OPENJSON işlevini sonuçlar için açık bir şema sağlamadan kullandığınızda (yani, WITH sonra OPENJSON yan tümcesi olmadan) işlev aşağıdaki üç sütuna sahip bir tablo döndürür:
- Giriş nesnesindeki özelliğin
name'ı (veya giriş dizisindeki öğenin dizini). - Özelliğin veya dizi öğesinin
value'ı. -
type(örneğin, dize, sayı, boolean, dizi veya nesne).
OPENJSON, JSON nesnesinin her özelliğini veya dizinin her öğesini ayrı bir satır olarak döndürür.
Aşağıdaki örnek, varsayılan şemayla (isteğe bağlı OPENJSON yan tümcesi olmadan) WITH kullanır ve JSON nesnesinin her özelliği için bir satır döndürür.
DECLARE @json NVARCHAR(MAX);
SET @json='{ "name": "John", "surname": "Doe", "age": 45, "skills": [ "SQL", "C#", "MVC" ]}';
SELECT *
FROM OPENJSON(@json);
Sonuç kümesi aşağıdadır.
| key | value | type |
|---|---|---|
name |
John |
1 |
surname |
Doe |
1 |
age |
45 |
2 |
skills |
[ "SQL" ,"C#" ,"MVC" ] |
4 |
Daha fazla bilgi ve örnek için bkz. OpenJSON'ı Varsayılan Şema ile kullanma.
Söz dizimi ve kullanımı için bkz. OPENJSON.
Açık bir yapıya sahip OPENJSON çıkışı
WITH işlevinin OPENJSON yan tümcesini kullanarak sonuçlar için bir şema belirttiğinizde, işlev yalnızca WITH yan tümcesinde tanımladığınız sütunları içeren bir tablo döndürür. İsteğe bağlı WITH yan tümcesinde, her çıkış değeri için bir dizi çıkış sütunu, bunların türleri ve JSON kaynak özelliklerinin yollarını belirtirsiniz.
OPENJSON JSON nesneleri dizisi boyunca yinelenir, her sütun için belirtilen yoldaki değeri okur ve değeri belirtilen türe dönüştürür.
Aşağıdaki örnek, OPENJSON maddesinde belirttiğiniz şekilde çıktıyı almak üzere WITH ile bir şablon kullanır.
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{
"Order": {
"Number": "SO43659",
"Date": "2024-05-31T00:00:00"
},
"AccountNumber": "AW29825",
"Item": {
"Price": 2024.9940,
"Quantity": 1
}
},
{
"Order": {
"Number": "SO43661",
"Date": "2024-06-01T00:00:00"
},
"AccountNumber": "AW73565",
"Item": {
"Price": 2024.9940,
"Quantity": 3
}
}
]';
SELECT *
FROM OPENJSON(@json) WITH (
Number VARCHAR(200) '$.Order.Number',
DATE DATETIME '$.Order.Date',
Customer VARCHAR(200) '$.AccountNumber',
Quantity INT '$.Item.Quantity'
);
Sonuç kümesi aşağıdadır.
| Number | Date | Customer | Quantity |
|---|---|---|---|
SO43659 |
2024-05-31T00:00:00 |
AW29825 |
1 |
SO43661 |
2024-06-01T00:00:00 |
AW73565 |
3 |
Bu işlev bir JSON dizisinin öğelerini döndürür ve biçimlendirir.
JSON dizisindeki her öğe için
OPENJSONçıkış tablosunda yeni bir satır oluşturur. JSON dizisindeki iki öğe, döndürülen tabloda iki satıra dönüştürülür.colName type json_pathsöz dizimi kullanılarak belirtilen her sütun içinOPENJSONbelirtilen yolda her dizi öğesinde bulunan değeri belirtilen türe dönüştürür. Bu örnekte,Datesütununun değerleri$.Order.Dateyolundaki her öğeden alınır ve tarih saat değerlerine dönüştürülür.
Daha fazla bilgi ve örnek için bkz. OpenJSON'ı Açık Şema ile kullanma.
Söz dizimi ve kullanımı için bkz. OPENJSON.
OPENJSON için uyumluluk düzeyi 130 gerekir
OPENJSON işlevi yalnızca uyumluluk düzeyi 130 ve üzeri altında kullanılabilir.
veritabanı uyumluluk düzeyiniz130'den düşükse, SQL Server OPENJSON işlevini bulamaz ve çalıştıramaz. Diğer yerleşik JSON işlevleri tüm uyumluluk düzeylerinde kullanılabilir.
Uyumluluk düzeyini sys.databases görünümünde veya veritabanı özelliklerinde denetleyebilirsiniz ve aşağıdaki komutu kullanarak veritabanının uyumluluk düzeyini değiştirebilirsiniz:
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130;
İlgili içerik
- NoSQL ile ilişkisel dünyalar arasında bir köprü olarak JSON
- OPENJSON (Transact-SQL)