Aracılığıyla paylaş


JSON veri türü

Şunlar için geçerlidir: SQL Server 2025 (17.x)Microsoft Fabric'teAzure SQL VeritabanıAzure SQL Yönetilen Örneği SQL veritabanı önizlemesi

JSON belgelerini yerel ikili biçimde depolayan yerel json veri türü.

json türü, kolay sorgulama ve işleme için en iyi duruma getirilmiş JSON belgelerinin yüksek uygunlukta depolanmasını sağlar ve JSON verilerini varchar veya nvarchardepolamaya göre aşağıdaki avantajları sağlar:

  • Belge zaten ayrıştırılmış olduğundan daha verimli okumalar
  • Sorgu, belgenin tamamına erişmeden tek tek değerleri güncelleştirene kadar daha verimli yazma işlemleri
  • Sıkıştırma için iyileştirilmiş daha verimli depolama
  • Mevcut kodla uyumlulukta değişiklik yok

json türü UTF-8 kodlamasını kullanarak verileri dahili olarak depolar Latin1_General_100_BIN2_UTF8. Bu davranış JSON belirtimi ile eşleşir.

JSON verilerini sorgulama hakkında daha fazla bilgi için bkz. SQL ServerJSON verilerini .

Örnek söz dizimi

json türünün kullanım söz dizimi, tablodaki diğer tüm SQL Server veri türlerine benzer.

column_name JSON [NOT NULL | NULL] [CHECK(constraint_expression)] [DEFAULT(default_expression)]

json türü, CREATE TABLE deyiminde yer alan sütun tanımında kullanılabilir, örneğin:

CREATE TABLE Orders (order_id int, order_details JSON NOT NULL);

Kısıtlamalar sütun tanımının bir parçası olarak belirtilebilir, örneğin:

CREATE TABLE Orders (order_id int, order_details JSON NOT NULL
   CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1)
);

Özellik kullanılabilirliği

JSON işlevi desteği ilk olarak SQL Server 2016'da (13.x) kullanıma sunulmuştur. Yerel json türü 2024'te Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nde kullanıma sunulmuştur.

json tüm veritabanı uyumluluk düzeylerinde kullanılabilir.

Not

JSON veri türü:

modify yöntemi

Not

modify yöntemi şu anda önizleme aşamasındadır ve yalnızca SQL Server 2025 (17.x) Önizleme sürümünde kullanılabilir.

Yerel json türü yöntemini destekler modify . Bir sütunda depolanan JSON belgelerini değiştirmek için kullanın modify . yöntemi, modify mümkün olduğunda verilerde yerinde değişiklikler yapmak için iyileştirmelere sahiptir ve JSON türündeki bir sütunda JSON belgesini değiştirmenin tercih edilen yoludur.

JSON dizeleri için, yeni değer mevcut değerden küçük veya buna eşitse yerinde değişiklik yapılabilir.

JSON numaraları için, yeni değer aynı türdeyse veya mevcut değerin aralığındaysa yerinde değişiklik yapılabilir.

DROP TABLE IF EXISTS JsonTable;
CREATE TABLE JsonTable ( id int PRIMARY KEY, d JSON );
INSERT INTO JsonTable (id, d) VALUES(1, '{"a":1, "b":"abc", "c":true}');
UPDATE JsonTable
SET d.modify('$.a', 14859)
WHERE id = 1;
UPDATE JsonTable
SET d.modify('$.b', 'def')
WHERE id = 1;

İşlev desteği

Tüm JSON işlevleri kod değişikliği veya kullanım farkı gerekmeyecek şekilde json türünü destekler.

  • OPENJSON şu anda bazı platformlarda json veri türünü desteklememektedir. Daha fazla bilgi için bkz . Sınırlamalar.

JSON işlevlerinin tam listesi için bkz.JSON işlevleri.

Dizin

JSON verileri için özel dizin türü yoktur.

json türü, CREATE INDEX deyiminde anahtar sütunu olarak kullanılamaz. Ancak, bir json sütunu dizin tanımına eklenmiş bir sütun olarak belirtilebilir. Ayrıca, filtrelenmiş dizinin yan tümcesinde WHERE sütunu görüntülenebilir.

Dönüşüm

CAST türünden CONVERT veya kullanarak açık dönüştürme, char, nchar, varcharve nvarchar türlerine yapılabilir. xmldavranışına benzer şekilde tüm örtük dönüştürmelere izin verilmez. Benzer şekilde, yalnızca char, nchar, varcharve nvarchar açıkça json türüne dönüştürülebilir.

json türü, sql_variant türüyle kullanılamaz veya sql_variant bir değişkene veya sütuna atanamaz. Bu kısıtlama, varchar(max), varbinary(max), nvarchar(max), xmlve CLR tabanlı veri türlerine benzer.

varchar(max) sütunu gibi mevcut sütunları kullanarak ALTER TABLE dönüştürebilirsiniz. xml veri türüne benzer şekilde, json sütununu ALTER TABLEkullanarak dize veya ikili türlerden herhangi birine dönüştüremezsiniz.

Daha fazla bilgi için bkz. Veri türü dönüştürme.

Uyumluluk

json türü, kullanıcı tanımlı bir işlevde veya saklı yordamın parametresinde parametre veya dönüş türü olarak kullanılabilir. json türü tetikleyiciler ve görünümlerle uyumludur.

Şu anda bcp aracının yerel biçimi, varchar veya nvarcharolarak json belgesini içerir. json veri türü sütunu belirlemek için bir biçim dosyası belirtmeniz gerekir.

CREATE TYPE türü için kullanılarak diğer ad türü oluşturulmasına izin verilmez. Bu, xml türüyle aynı davranıştır.

JSON türüyle SELECT ... INTO kullanılması, JSON türüne sahip bir tablo oluşturur.

Sınırlama

  • davranışı CAST ( ... AS JSON) bir json türü döndürür, ancak sp_describe_first_result_set sistem saklı yordamı json veri türünü doğru şekilde döndürmez. Bu nedenle, birçok veri erişim istemcisi ve sürücüsü varchar veya nvarchar veri türünü görür.
    • Şu anda TDS >= 7,4 (UTF-8 ile), ile Latin_General_100_bin2_utf8 görür.
    • TDS 7.4 şu anda veritabanı harmanlaması ile nvarchar(max) görüyor.
  • OPENJSON() Şu anda işlev bazı platformlarda json türünü kabul etmez. Şu anda örtük bir dönüştürmedir. İlk olarak açıkça nvarchar(max) dönüştürün.