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
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
İlişkisel veritabanındaki işlemler, tam bir satır kümesi üzerinde işlem gerçekleştirir. Örneğin, bir SELECT deyimi tarafından döndürülen satır kümesi, deyiminin yan tümcesindeki WHERE koşulları karşılayan tüm satırlardan oluşur. deyimi tarafından döndürülen bu eksiksiz satır kümesi sonuç kümesi olarak bilinir. Özellikle etkileşimli çevrimiçi uygulamalar olmak üzere uygulamalar, sonuç kümesinin tamamı bir birim olarak her zaman etkili bir şekilde çalışamaz. Bu uygulamaların bir kerede bir satırla veya küçük bir satır bloğuyla çalışması için bir mekanizma gerekir. İmleçler, bu mekanizmayı sağlayan sonuç kümelerinin uzantısıdır.
İmleçler sonuç işlemeyi şu şekilde genişletir:
Sonuç kümesinin belirli satırlarında konumlandırmaya izin verme.
Sonuç kümesindeki geçerli konumdan bir satır veya satır bloğu alınıyor.
Sonuç kümesindeki geçerli konumdaki satırlarda veri değişikliklerini destekleme.
Sonuç kümesinde sunulan veritabanı verilerinde diğer kullanıcılar tarafından yapılan değişikliklere ilişkin farklı görünürlük düzeylerini destekleme.
Betiklerde, saklı yordamlarda Transact-SQL deyimleri sağlamak ve sonuç kümesindeki verilere erişimi tetikler.
Açıklamalar
Bazı senaryolarda, tabloda birincil anahtar varsa, WHILE imleç yüküne neden olmadan imleç yerine döngü kullanılabilir.
Ancak, imleçlerin yalnızca kaçınılmaz olmadığı, aslında gerekli olduğu senaryolar vardır. Bu durumda, tabloları imlece göre güncelleştirme gereksinimi yoksa, hızlı ileri ve salt okunur imleçler anlamına gelen firehose imleçleri kullanın.
İmleç uygulamaları
SQL Server üç imleç uygulamasını destekler.
| İmleç uygulaması | Description |
|---|---|
| Transact-SQL İmleçleri | Transact-SQL imleçler söz dizimini DECLARE CURSOR temel alır ve çoğunlukla Transact-SQL betiklerde, saklı yordamlarda ve tetikleyicilerde kullanılır. Transact-SQL imleçler sunucuda uygulanır ve istemciden sunucuya gönderilen Transact-SQL deyimleri tarafından yönetilir. Bunlar, toplu işlerde, saklı yordamlarda veya tetikleyicilerde de bulunabilir. |
| Uygulama programlama arabirimi (API) sunucu imleçleri | API imleçleri, OLE DB ve ODBC'deki API imleç işlevlerini destekler. API sunucusu imleçleri sunucuda uygulanır. Her seferinde bir istemci uygulaması bir API imleç işlevini çağırdığında, SQL Server Yerel İstemci OLE DB sağlayıcısı veya ODBC sürücüsü isteği API sunucusu imlecine karşı işlem yapılması için sunucuya iletir. |
| İstemci imleçleri | İstemci imleçleri, SQL Server Yerel İstemci ODBC sürücüsü ve ADO API'sini uygulayan DLL tarafından dahili olarak uygulanır. İstemci imleçleri, istemcideki tüm sonuç kümesi satırları önbelleğe alarak uygulanır. Bir istemci uygulaması bir API imleç işlevini her çalıştırdığında, SQL Server Yerel İstemci ODBC sürücüsü veya ADO DLL, istemcide önbelleğe alınan sonuç kümesi satırlarında imleç işlemini gerçekleştirir. |
İmleç türü
SQL Server dört imleç türünü destekler.
İmleçler tempdb çalışma tablolarını kullanabilir. Aynı taşan toplama veya sıralama işlemleri gibi bunlar da G/Ç maliyetlerine neden olur ve potansiyel bir performans darboğazı oluşturur.
STATIC imleçler, başlangıcından itibaren çalışma tablolarını kullanır. Daha fazla bilgi için Sorgu işleme mimarisi kılavuzunun worktables bölümüne bakın.
Yalnızca ileri
"Yalnızca ileriye doğru olan imleç, FORWARD_ONLY ve READ_ONLY olarak belirtilir ve kaydırmayı desteklemez." Bunlar aynı zamanda ateşli imleçler olarak da adlandırılır ve satırların yalnızca imlecin başından sonuna kadar seri olarak getirilmesini destekler. Satırlar getirilene kadar veritabanından çağrılmaz. Geçerli kullanıcı tarafından yapılan veya sonuç kümesindeki satırları etkileyen diğer kullanıcılar tarafından işlenen tüm INSERT, UPDATEve DELETE deyimlerinin etkileri, satırlar imleçten getirildiğinde görünür.
İmleç geriye kaydırılamadığından, satır getirildikten sonra veritabanındaki satırlarda yapılan değişikliklerin çoğu imleç üzerinden görünmez. Sonuç kümesi içindeki satırın konumunu belirlemek için kullanılan bir değerin değiştirildiği durumlarda(kümelenmiş dizin kapsamındaki bir sütunu güncelleştirmek gibi) değiştirilen değer imleç üzerinden görünür.
Veritabanı API'sinin imleç modelleri yalnızca ileriye doğru imleci ayrı bir imleç türü olarak düşünse de SQL Server bunu yapmaz. SQL Server, statik, anahtar kümesi temelli ve dinamik imleçlere uygulanabilecek seçenekler olarak hem ileriye hem de kaydırmayı dikkate alır. Transact-SQL imleçler yalnızca iletim yönünde, statik, anahtar kümesi temelli ve dinamik imleçleri destekler. Veritabanı API'sinin imleç modelleri statik, anahtar kümesi temelli ve dinamik imleçlerin her zaman kaydırılabilir olduğunu varsayar. Veritabanı API'si imleç özniteliği veya özelliği yalnızca ileriye doğru olarak ayarlandığında, SQL Server bunu yalnızca ileriye doğru dinamik imleç olarak uygular.
Statik
Statik imlecin tam sonuç kümesi, tempdb imleç açıldığında yerleşik olarak oluşturulur. Statik imleç her zaman sonuç kümesini imleç açıldığında olduğu gibi görüntüler. Statik imleçler çok az değişiklik algılar veya hiç değişiklik algılamaz, ancak kaydırma sırasında nispeten az kaynak kullanır.
İmleç, veritabanında yapılan ve sonuç kümesinin üyeliğini veya sonuç kümesini oluşturan satırların sütunlarındaki değerlerde yapılan değişiklikleri yansıtmaz. Statik imleç, imleç deyiminin arama koşullarıyla eşleşse bile, imleç açıldıktan sonra veritabanına eklenen yeni satırları görüntülemez SELECT . Sonuç kümesini oluşturan satırlar diğer kullanıcılar tarafından güncelleştirilirse, yeni veri değerleri statik imleçte görüntülenmez. Statik imleç, imleç açıldıktan sonra veritabanından silinen satırları görüntüler. Hayır UPDATE, INSERTveya DELETE işlemleri statik bir imleçte yansıtılır (imleç kapatılıp yeniden açılmadığı sürece), imleci açan aynı bağlantı kullanılarak yapılan değişiklikler bile yansıtılmaz.
Uyarı
SQL Server statik imleçleri her zaman salt okunur olarak tanımlanır.
Statik imlecin sonuç kümesi içindeki tempdbbir çalışma tablosunda depolandığından, sonuç kümesindeki satırların boyutu SQL Server tablosunun en büyük satır boyutunu aşamaz.
Daha fazla bilgi için Sorgu işleme mimarisi kılavuzunun worktables bölümüne bakın. Maksimum satır boyutu hakkında daha fazla bilgi için bkz. SQL Server için en fazla kapasite belirtimleri.
Transact-SQL statik imleçler için duyarsız terimini kullanır. Bazı veritabanı API'leri bunları anlık görüntü imleçleri olarak tanımlar.
Anahtar Kümesi
Anahtar kümesi temelli imleçteki satırların üyeliği ve sırası, imleç açıldığında düzeltilir. Tuş kümesi temelli imleçler, anahtar kümesi olarak bilinen bir dizi benzersiz tanımlayıcı veya anahtar tarafından denetlenmektedir. Anahtarlar, sonuç kümesindeki satırları benzersiz olarak tanımlayan bir sütun kümesinden oluşturulur. Anahtar kümesi, imleç açıldığında deyimi için SELECT uygun olan tüm satırlardan anahtar değerlerinin kümesidir. Anahtar kümesine dayalı imlecin anahtar kümesi, imleç açıldığında tempdb içinde oluşturulur.
Dinamik
Dinamik imleçler statik imleçlerin tersidir. Dinamik imleçler, imleci kaydırırken sonuç kümesindeki satırlarda yapılan tüm değişiklikleri yansıtır. Sonuç kümesindeki satırların veri değerleri, sırası ve üyeliği her getirmede değişebilir. Tüm kullanıcılar tarafından yapılan tüm UPDATE, INSERTve DELETE deyimleri imleç üzerinden görünür. Güncelleştirmeler, veya Transact-SQL SQLSetPos yan tümcesi gibi WHERE CURRENT OF bir API işlevi kullanılarak imleç üzerinden yapılırsa hemen görünür. İmleç işlem yalıtım düzeyi "okunmamış" olarak ayarlanmadıkça, imleç dışında yapılan güncellemeler işlenmeden görünmez. Yalıtım düzeyleri hakkında daha fazla bilgi için bkz. SET TRANSACTION ISOLATION LEVEL (Transact-SQL).
Uyarı
Dinamik imleç planları hiçbir zaman uzamsal dizinleri kullanmaz.
Bir imleç isteyin
SQL Server, imleç istemek için iki yöntemi destekler:
-
Transact-SQL
Transact-SQL dili, ISO imleci söz dizimi örnek alınarak modellenmiş imleçleri kullanmayı destekler.
Veritabanı uygulama programlama arabirimi (API) imleç işlevleri
SQL Server, şu veritabanı API'lerinin imleç işlevselliğini destekler:
ADO (Microsoft ActiveX Veri Nesnesi)
OLE DB
ODBC (Açık Veritabanı Bağlantısı)
Bir uygulama hiçbir zaman bu iki imleç isteme yöntemini karıştırmamalıdır. İmleç davranışlarını belirtmek için API kullanan bir uygulama, daha sonra bir Transact-SQL imleci istemek için Transact-SQL DECLARE CURSOR deyimi çalıştırmamalıdır. Bir uygulama yalnızca tüm API imleç özniteliklerini varsayılan değerlerine geri ayarlarsa yürütülmelidir DECLARE CURSOR .
Transact-SQL veya API imleci istenmezse, SQL Server varsayılan olarak uygulamaya varsayılan sonuç kümesi olarak bilinen eksiksiz bir sonuç kümesi döndürür.
İmleç işlemi
Transact-SQL imleçler ve API imleçlerinin söz dizimi farklıdır, ancak aşağıdaki genel işlem tüm SQL Server imleçleriyle birlikte kullanılır:
İmleci bir Transact-SQL deyiminin sonuç kümesiyle ilişkilendirin ve imleçteki satırların güncelleştirilip güncelleştirilemeyeceği gibi imlecin özelliklerini tanımlayın.
Transact-SQL deyimini çalıştırarak imleci doldurun.
İmleçte görmek istediğiniz satırları alın. İmleçten bir satır veya bir satır bloğu alma işlemine getirme adı verilir. Satırları ileri veya geri yönde almak için bir dizi getirme gerçekleştirmeye kaydırma denir.
İsteğe bağlı olarak, imleçteki geçerli konumdaki satırda değişiklik işlemleri (güncelleştirme veya silme) gerçekleştirin.
İmleci kapatın.