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: dokuda sql
veritabanı Azure SQL Yönetilen Örneği Azure SQL Veritabanı
Azure SQL Veritabanı, Microsoft Fabric'teki SQL veritabanı ve Azure SQL Yönetilen Örneği, JavaScript Nesne Gösterimi (JSON) biçiminde temsil edilen verileri ayrıştırıp sorgulamanıza ve ilişkisel verilerinizi JSON metni olarak dışarı aktarmanıza olanak tanır. Aşağıdaki JSON senaryoları kullanılabilir:
- .
- JSON verileriyle çalışma
- JSON skaler işlevlerini kullanarak JSON verilerini sorgulama.
- dönüştürme.
İlişkisel verileri JSON biçiminde biçimlendirme
Veritabanı katmanından veri alan ve JSON biçiminde bir yanıt sağlayan bir web hizmetiniz veya JSON olarak biçimlendirilmiş verileri kabul eden istemci tarafı JavaScript çerçeveleri veya kitaplıklarınız varsa, veritabanı içeriğinizi doğrudan bir SQL sorgusunda JSON olarak biçimlendirebilirsiniz. Artık sonuçları JSON olarak biçimlendiren uygulama kodu yazmanız veya tablosal sorgu sonuçlarını dönüştürmek ve sonra nesneleri JSON biçimine seri hale getirmek için bazı JSON serileştirme kitaplığı eklemeniz gerekmez. Bunun yerine, SQL sorgu sonuçlarını JSON olarak biçimlendirmek ve doğrudan uygulamanızda kullanmak için yan tümcesini kullanabilirsiniz FOR JSON .
Aşağıdaki örnekte, FOR JSON yan tümcesi kullanılarak tablodaki Sales.Customer satırlar JSON olarak biçimlendirilir:
select CustomerName, PhoneNumber, FaxNumber
from Sales.Customers
FOR JSON PATH
FOR JSON PATH yan tümcesi, sorgunun sonuçlarını JSON metni olarak biçimlendirer. Sütun adları anahtar olarak kullanılırken, hücre değerleri JSON değerleri olarak oluşturulur:
[
{"CustomerName":"Eric Torres","PhoneNumber":"(307) 555-0100","FaxNumber":"(307) 555-0101"},
{"CustomerName":"Cosmina Vlad","PhoneNumber":"(505) 555-0100","FaxNumber":"(505) 555-0101"},
{"CustomerName":"Bala Dixit","PhoneNumber":"(209) 555-0100","FaxNumber":"(209) 555-0101"}
]
Sonuç kümesi, her satırın ayrı bir JSON nesnesi olarak biçimlendirildiği bir JSON dizisi olarak biçimlendirilir.
PATH , sütun takma adlarında noktalı gösterimi kullanarak JSON sonucunuzun çıkış biçimini özelleştirebileceğinizi belirtir. Aşağıdaki sorgu çıktı JSON biçiminde anahtarın CustomerName adını değiştirir ve telefon ve faks numaralarını alt nesneye Contact yerleştirir:
select CustomerName as Name, PhoneNumber as [Contact.Phone], FaxNumber as [Contact.Fax]
from Sales.Customers
where CustomerID = 931
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
Bu sorgunun çıktısı şöyle görünür:
{
"Name":"Nada Jovanovic",
"Contact":{
"Phone":"(215) 555-0100",
"Fax":"(215) 555-0101"
}
}
Bu örnekte, WITHOUT_ARRAY_WRAPPER seçeneğini belirterek dizi yerine tek bir JSON nesnesi döndürdü. Sorgu sonucunda tek bir nesne döndürdüğünü biliyorsanız bu seçeneği kullanabilirsiniz.
yan tümcesinin FOR JSON ana değeri, veritabanınızdan iç içe JSON nesneleri veya dizileri olarak biçimlendirilmiş karmaşık hiyerarşik veriler döndürmenize olanak tanır. Aşağıdaki örnekte, tablosundan iç içe dizi olarak ait olan satırların Orders nasıl eklendiği gösterilmektedirCustomer:Orders
select CustomerName as Name, PhoneNumber as Phone, FaxNumber as Fax,
Orders.OrderID, Orders.OrderDate, Orders.ExpectedDeliveryDate
from Sales.Customers Customer
join Sales.Orders Orders
on Customer.CustomerID = Orders.CustomerID
where Customer.CustomerID = 931
FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER
Verileri almak Customer ve ardından ilgili Ordersbir listeyi getirmek için ayrı sorgular göndermek yerine, aşağıdaki örnek çıktıda gösterildiği gibi gerekli tüm verileri tek bir sorguyla alabilirsiniz:
{
"Name":"Nada Jovanovic",
"Phone":"(215) 555-0100",
"Fax":"(215) 555-0101",
"Orders":[
{"OrderID":382,"OrderDate":"2013-01-07","ExpectedDeliveryDate":"2013-01-08"},
{"OrderID":395,"OrderDate":"2013-01-07","ExpectedDeliveryDate":"2013-01-08"},
{"OrderID":1657,"OrderDate":"2013-01-31","ExpectedDeliveryDate":"2013-02-01"}
]
}
JSON verileriyle çalışma
Kesin olarak yapılandırılmış verileriniz yoksa, karmaşık alt nesneleriniz, dizileriniz veya hiyerarşik verileriniz varsa ya da veri yapılarınız zaman içinde gelişirse, JSON biçimi herhangi bir karmaşık veri yapısını temsil etme konusunda size yardımcı olabilir.
JSON, diğer dize türleri gibi kullanılabilecek bir metin biçimidir. JSON verilerini standart nvarchar olarak gönderebilir veya depolayabilirsiniz:
CREATE TABLE Products (
Id int identity primary key,
Title nvarchar(200),
Data nvarchar(max)
)
go
CREATE PROCEDURE InsertProduct(@title nvarchar(200), @json nvarchar(max))
AS BEGIN
insert into Products(Title, Data)
values(@title, @json)
END
Bu örnekte kullanılan JSON verileri nvarchar(MAX) türü kullanılarak temsil edilir. JSON bu tabloya eklenebilir veya aşağıdaki örnekte gösterildiği gibi standart Transact-SQL söz dizimi kullanılarak saklı yordamın bağımsız değişkeni olarak sağlanabilir:
EXEC InsertProduct 'Toy car', '{"Price":50,"Color":"White","tags":["toy","children","games"]}'
Dize verileriyle çalışan tüm istemci tarafı diller veya kitaplıklar JSON verileriyle de çalışır. JSON, Bellek için iyileştirilmiş tablo veya Sistem sürümüne sahip tablo gibi nvarchar türünü destekleyen herhangi bir tabloda depolanabilir. JSON, istemci tarafı kodunda veya veritabanı katmanında herhangi bir kısıtlamaya neden olmaz.
JSON verilerini sorgulama
Tablolarda JSON olarak biçimlendirilmiş verileriniz varsa, JSON işlevleri bu verileri herhangi bir SQL sorgusunda kullanmanıza olanak sağlar.
JSON işlevleri , JSON olarak biçimlendirilmiş verileri başka bir SQL veri türü olarak işlemenize olanak sağlar. JSON metnindeki değerleri kolayca ayıklayabilir ve herhangi bir sorguda JSON verilerini kullanabilirsiniz:
select Id, Title, JSON_VALUE(Data, '$.Color'), JSON_QUERY(Data, '$.tags')
from Products
where JSON_VALUE(Data, '$.Color') = 'White'
update Products
set Data = JSON_MODIFY(Data, '$.Price', 60)
where Id = 1
işlevi, JSON_VALUE Veri sütununda depolanan JSON metninden bir değer ayıklar. Bu işlev, ayıklamak için JSON metnindeki bir değere başvurmak için JavaScript benzeri bir yol kullanır. Ayıklanan değer SQL sorgusunun herhangi bir bölümünde kullanılabilir.
JSON_QUERY işlevi ile JSON_VALUEbenzerdir. 'den farklı JSON_VALUEolarak, bu işlev JSON metnine yerleştirilmiş diziler veya nesneler gibi karmaşık alt nesneyi ayıklar.
JSON_MODIFY işlevi, güncelleştirilmesi gereken JSON metnindeki değerin yolunu ve eskisinin üzerine yazacak yeni bir değer belirtmenize olanak tanır. Bu şekilde, tüm yapıyı yeniden ayrıştırmadan JSON metnini kolayca güncelleştirebilirsiniz.
JSON standart bir metinde depolandığından, metin sütunlarında depolanan değerlerin düzgün biçimlendirildiğinin garantisi yoktur. Standart denetim kısıtlamalarını ve ISJSON işlevini kullanarak JSON sütununda depolanan metnin düzgün biçimlendirildiğini doğrulayabilirsiniz:
ALTER TABLE Products
ADD CONSTRAINT [Data should be formatted as JSON]
CHECK (ISJSON(Data) > 0)
Giriş metni düzgün biçimlendirilmiş JSON ise işlev ISJSON değerini 1döndürür. JSON sütununun her eklemesinde veya güncelleştirmesinde, bu kısıtlama yeni metin değerinin yanlış biçimlendirilmiş JSON olmadığını doğrular.
JSON'yi tablo biçiminde dönüştürme
JSON koleksiyonlarını tablo biçiminde dönüştürebilir ve JSON verilerini yükleyebilir veya sorgulayabilirsiniz.
OPENJSON , JSON metnini ayrıştıran, JSON nesneleri dizisini bulayan, dizinin öğeleri arasında yineleyen ve dizinin her öğesi için çıkış sonucunda bir satır döndüren bir tablo-değeri T-SQL işlevidir.
Örnekte, açılması gereken JSON dizisinin nerede bulunacağını (yolda), sonuç olarak hangi sütunların $.Orders döndürüleceğini ve hücre olarak döndürülecek JSON değerlerinin nerede bulunacağını belirtebiliriz.
Değişkendeki bir JSON dizisini @orders bir satır kümesine dönüştürebilir, bu sonuç kümesini analiz edebilir veya standart bir tabloya satır ekleyebiliriz:
CREATE PROCEDURE InsertOrders(@orders nvarchar(max))
AS BEGIN
insert into Orders(Number, Date, Customer, Quantity)
select Number, Date, Customer, Quantity
FROM OPENJSON (@orders)
WITH (
Number varchar(200),
Date datetime,
Customer varchar(200),
Quantity int
)
END
JSON dizisi olarak biçimlendirilen ve saklı yordama parametre olarak sağlanan sipariş koleksiyonu ayrıştırılabilir ve Orders tablosuna eklenebilir.