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.
Bu makalede Entity SQL ile Transact-SQL arasındaki farklar açıklanmaktadır.
Devralma ve İlişkiler Desteği
Varlık SQL'i doğrudan kavramsal varlık şemalarıyla çalışır ve devralma ve ilişkiler gibi kavramsal model özelliklerini destekler.
Devralma ile çalışırken, bir üst tür örnekleri koleksiyonundan bir alt türün örneklerini seçmek genellikle yararlıdır. Entity SQL'deki oftype işleci (C# Dizilerinde olduğu gibi oftype ) bu özelliği sağlar.
Koleksiyon desteği
Entity SQL koleksiyonları birinci sınıf varlıklar olarak değerlendirir. Örneğin:
Koleksiyon ifadeleri bir
fromyan tümcede geçerlidir.inveexistsalt sorgular herhangi bir koleksiyona izin verecek şekilde genelleştirilmiştir.Alt sorgu, bir tür koleksiyondur.
e1 in e2veexists(e)bu işlemleri gerçekleştirmek için Entity SQL yapılarıdır.union,intersectveexceptgibi küme işlemleri şimdi koleksiyonlar üzerinde çalışmaktadır.Birleşimler koleksiyonlar üzerinde çalışır.
İfade desteği
Transact-SQL alt sorgular (tablolar) ve ifadeler (satırlar ve sütunlar) içerir.
Entity SQL, koleksiyonları ve iç içe yerleştirilmiş koleksiyonları desteklemek için her şeyi bir ifade haline getirir. Varlık SQL'i Transact-SQL'den daha çok birleştirilebilir; her ifade her yerde kullanılabilir. Sorgu ifadeleri her zaman yansıtılan türlerin koleksiyonlarıyla sonuçlanır ve koleksiyon ifadelerine izin verilen her yerde kullanılabilir. Entity SQL'de desteklenmeyen Transact-SQL ifadeleri hakkında bilgi için bkz. Desteklenmeyen İfadeler.
Aşağıdakilerin tümü geçerli Entity SQL sorgularıdır:
1+2 *3
"abc"
row(1 as a, 2 as b)
{ 1, 3, 5}
e1 union all e2
set(e1)
Alt Sorguların Tekdüze Yaklaşımı
Tablolara odaklanan Transact-SQL, alt sorguların bağlamsal yorumunu gerçekleştirir. Örneğin, yan tümcesindeki from bir alt sorgu çok kümeli (tablo) olarak kabul edilir. Ancak yan tümcesinde select kullanılan aynı alt sorgu, skaler alt sorgu olarak kabul edilir. Benzer şekilde, bir işlecin sol tarafında kullanılan bir in alt sorgu skaler alt sorgu olarak kabul edilirken, sağ tarafının çok kümeli bir alt sorgu olması beklenir.
Entity SQL bu farklılıkları ortadan kaldırır. İfadenin, kullanıldığı bağlama bağlı olmayan tekdüzen bir yorumu vardır. Entity SQL, tüm alt sorguları çok kümeli alt sorgular olarak kabul eder. Alt sorgudan bir skaler değer istenirse, Entity SQL bir koleksiyon üzerinde çalışan işleci (bu örnekte, alt sorgu) sağlar anyelement ve koleksiyondan bir tek değer ayıklar.
Alt Sorgular için Bilinçsiz Zorlamaları Önlemek
Alt sorguların tekdüzen işlenmesinin ilgili yan etkisi, alt sorguların skaler değerlere örtük olarak dönüştürülmesidir. Özellikle, Transact-SQL'de, tek bir alana sahip birden fazla satırdan oluşan bir çoklu küme, örtük olarak, veri türü alanınki olan skaler bir değere dönüştürülür.
Entity SQL bu örtük zorlamayı desteklemez. Entity SQL, bir koleksiyondan singleton değeri ayıklamak için ANYELEMENT işleci ve bir sorgu ifadesi sırasında satır sarmalayıcı oluşturmamak için select value yan tümcesi sağlar.
Değer Seçin: Örtük Satır Sarmalayıcıdan Kaçınma
Transact-SQL alt sorgusundaki select yan tümcesi, yan tümcedeki öğelerin çevresinde örtük olarak bir satır sarmalayıcı oluşturur. Bu, skaler veya nesne koleksiyonları oluşturamadığımızı gösterir. Transact-SQL, bir alana sahip olan rowtype ile aynı veri türünden tekil bir değer arasında örtük bir zorlamaya izin verir.
Entity SQL, örtük satır oluşturma işlemini atlamak için select value cümlesini sağlar. Yan tümcesinde yalnızca bir select value öğe belirtilebilir. Böyle bir yan tümce kullanıldığında, select yan tümcesindeki öğelerin etrafında bir satır sarmalayıcı oluşturulmaz ve istenen şeklinde bir koleksiyon üretilebilir, örneğin, select value a.
Entity SQL ayrıca rastgele satırlar oluşturmak için satır oluşturucu sağlar.
select projeksiyondaki bir veya daha fazla öğeyi alır ve alanlarla bir veri kaydı oluşturur:
select a, b, c
Sol Korelasyon ve Aliasing
Transact-SQL'de, bir kapsamdaki ifadeler (tek bir yan tümce, örneğin select veya from) aynı kapsamda daha önce tanımlanan ifadelere başvuramaz. SQL'in bazı diyalektleri (Transact-SQLdahil) yan tümcesinde from bunların sınırlı biçimlerini destekler.
Entity SQL, from cümlesinde sol ilişkileri genelleştirir ve onları aynı şekilde ele alır. Yan tümcesindeki from ifadeler, ek söz dizimine gerek kalmadan aynı yan tümcedeki önceki tanımlara (soldaki tanımlar) başvurabilir.
Entity SQL ayrıca yan tümceleri içeren group by sorgulara ek kısıtlamalar getirir. Bu tür sorguların select yan tümcesi ve having yan tümcesindeki ifadeler yalnızca diğer adları aracılığıyla group by anahtarlarına başvurabilir. Aşağıdaki yapı Transact-SQL'de geçerlidir ancak Entity SQL'de değildir:
SELECT t.x + t.y FROM T AS t group BY t.x + t.y
Bunu Entity SQL'de yapmak için:
SELECT k FROM T AS t GROUP BY (t.x + t.y) AS k
Tabloların (Koleksiyonların) Sütunlarına (Özelliklerine) Atıfta Bulunma
Entity SQL'deki tüm sütun başvuruları, tablo takma adıyla birlikte belirtilmelidir. Aşağıdaki yapı (geçerli bir a sütunu olduğu varsayılan tablo T), Transact-SQL'da geçerlidir ancak Entity SQL'de geçerli değildir.
SELECT a FROM T
Entity SQL formu şudur:
SELECT t.a AS A FROM T AS t
Tablo diğer adları from yan tümcesinde isteğe bağlıdır. Tablo adı örtük bir takma ad olarak kullanılır. Entity SQL aşağıdaki forma da izin verir:
SELECT Tab.a FROM Tab
Nesneler Arasında Gezinme
Transact-SQL bir tablonun sütunlarına (bir satır) başvurmak için "." gösterimini kullanır. Entity SQL, programlama dillerinden ödünç alınan bu gösterimi, bir nesnenin özelliklerinde gezinmeyi destekleyecek şekilde genişletir.
Örneğin, eğer p Kişi türünde bir ifadeyse, bu kişinin adresinin şehrine başvurmak için aşağıdaki Varlık SQL söz dizimini kullanabilirsiniz.
p.Address.City
* için Destek Yok
Transact-SQL, tüm satır için diğer ad olarak vasıfsız * söz dizimini ve bu tablonun alanları için kısayol olarak vasıflı * söz dizimini (t.*) destekler. Buna ek olarak, Transact-SQL null değerleri de dahil olmak üzere özel bir count(*) toplamayı destekler.
Entity SQL* yapısını desteklemez. Transact-SQL sorguları select * from T ve select T1.* from T1, T2... formunda, Entity SQL'de sırasıyla select value t from T as t ve select value t1 from T1 as t1, T2 as t2... olarak ifade edilebilir. Ayrıca, bu yapılar devralmayı (değer değiştirilebilirliği) işlerken select * , değişkenler bildirilen türün en üst düzey özellikleriyle sınırlıdır.
Varlık SQL count(*) birleştirme işlevini desteklemez. Bunun yerine count(0) kullanın.
Gruplandırma Kriterleri değişiklikleri
Entity SQL group by anahtarların adlandırılmasını destekler.
select yan tümcesi ve having yan tümcesiindeki ifadeler, bu diğer adlar aracılığıyla group by anahtarlara başvurmalıdır. Örneğin, bu Varlık SQL söz dizimi:
SELECT k1, count(t.a), sum(t.a)
FROM T AS t
GROUP BY t.b + t.c AS k1
... aşağıdaki Transact-SQL ile eşdeğerdir:
SELECT b + c, count(*), sum(a)
FROM T
GROUP BY b + c
Collection-Based Agregalar
Entity SQL iki tür toplamayı destekler.
Koleksiyon tabanlı toplamalar koleksiyonlar üzerinde çalışır ve toplanan sonucu üretir. Bunlar sorgunun herhangi bir yerinde görünebilir ve bir group by cümle gerektirmez. Örneğin:
SELECT t.a AS a, count({1,2,3}) AS b FROM T AS t
Entity SQL, SQL stili toplamaları da destekler. Örneğin:
SELECT a, sum(t.b) FROM T AS t GROUP BY t.a AS a
ORDER BY Yan Tümce Kullanımı
Transact-SQLORDER BY yan tümcelerin yalnızca en üstteki SELECT .. FROM .. WHERE blokta belirtilmesine izin verir. Entity SQL'de iç içe ORDER BY ifade kullanabilirsiniz ve sorgunun herhangi bir yerine yerleştirilebilir, ancak iç içe sorguda sıralama korunmaz.
-- The following query will order the results by the last name
SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact AS C1
ORDER BY C1.LastName
-- In the following query ordering of the nested query is ignored.
SELECT C2.FirstName, C2.LastName
FROM (SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName) as C2
Tanımlayıcılar
Transact-SQL'de tanımlayıcı karşılaştırması geçerli veritabanının harmanlamasını temel alır. Varlık SQL'de tanımlayıcılar her zaman büyük/küçük harfe duyarsız ve vurguya duyarlıdır (yani, Varlık SQL'i vurgulu ve işaretsiz karakterleri birbirinden ayırır; örneğin, 'a' 'ấ' değerine eşit değildir). Entity SQL, aynı görünen ancak farklı kod sayfalarından gelen harflerin sürümlerini farklı karakterler olarak ele alır. Daha fazla bilgi için bkz. Giriş Karakter Kümesi.
Transact-SQL Fonksiyonelliği Varlık SQL'de Kullanılamıyor
Entity SQL'de aşağıdaki Transact-SQL işlevselliği kullanılamaz.
DML
Entity SQL şu anda DML deyimleri için destek sağlamaz (ekleme, güncelleştirme, silme).
DDL (Veri Tanım Dili)
Entity SQL, geçerli sürümde DDL için destek sağlamaz.
Kesinlik Temelli Programlama
Entity SQL, Transact-SQL'in aksine kesinlik temelli programlama için destek sağlamaz. Bunun yerine bir programlama dili kullanın.
Gruplandırma İşlevleri
Varlık SQL'i henüz gruplandırma işlevleri (örneğin, KÜP, ROLLUP ve GROUPING_SET) için destek sağlamaz.
Analitik İşlevler
Varlık SQL'i (henüz) analiz işlevleri için destek sağlamaz.
Yerleşik İşlevler, İşleçler
Entity SQL, Transact-SQL'in yerleşik işlevlerinin ve işleçlerinin bir alt kümesini destekler. Bu işleçler ve işlevler büyük olasılıkla büyük mağaza sağlayıcıları tarafından desteklenecektir. Entity SQL, bir sağlayıcı bildiriminde bildirilen depoya özgü işlevleri kullanır. Ayrıca Entity Framework, Entity SQL'in kullanması için yerleşik ve kullanıcı tanımlı mevcut depolama işlevlerini bildirmenize olanak tanır.
İpuçları
Varlık SQL'i sorgu ipuçları için mekanizma sağlamaz.
Sorgu Sonuçlarını Gruplama
Varlık SQL'i sorgu sonuçlarını toplu işlemeyi desteklemez. Örneğin, aşağıdakiler geçerlidir: Transact-SQL (toplu gönderim olarak)
SELECT * FROM products;
SELECT * FROM categories;
Ancak, eşdeğer Entity SQL desteklenmez:
SELECT value p FROM Products AS p;
SELECT value c FROM Categories AS c;
Entity SQL, komut başına yalnızca bir sonuç üreten sorgu deyimini destekler.