Transact-SQL imleçler
Transact-SQL imleçler esas saklı yordamlar, tetikleyiciler, kullanılır ve Transact-SQL komut içeriğini bir sonuç yaptıkları küme diğer kullanılabilir Transact-SQL ifadeler.
Kullanma işlemi normal bir Transact-SQL imleç bir saklı yordam veya tetikleyiciyi şöyledir:
Bildir Transact-SQL imleç tarafından döndürülen verileri içeren değişken. Her sonuç için bir değişken küme sütun.Sütun tarafından verilen değerlere basılı tutun ve, bir veri yeterli büyüklükte olmasını değişkenleri sütunun veri türü örtülü dönüştürülebilir bildirin.
Ilişkilendirme bir Transact-SQL imleç BILDIRMEK CURSOR deyimini kullanarak bir deyim ile. CURSOR BILDIRMEK deyim, imleci, imleç adı ve salt okunur veya salt ileri imleci olup olmadığı gibi özellikleri de tanımlar.
deyim çalıştırın ve imleç doldurmak için OPEN deyimini kullanın.
Fetch kişiye GETIRME INTO deyim, satırlar ve her sütuna ilişkin verileri, belirtilen bir değişken taşındı.Other Transact-SQL statements can then reference those variables to access the fetched data values.Transact-SQL cursors do not support fetching blocks of rows.
Imleç Bitirdiğiniz zaman, KAPATMA kullanmak deyim.Bir imleç kapatma imleci ait sonuç kümesi, kilitler geçerli satırda gibi bazı kaynakları serbest bırakır, ancak imleç yapısını OPEN deyim yeniden yayımlanması planlanmaktadır işlemek için kullanılabilir durumda kalır.Imleci hala bulunduğundan, imleç adı bu noktada yeniden kuramıyor.DEALLOCATE deyim tamamen imleç adı da dahil olmak üzere imleci, ayrılan tüm kaynakları serbest bırakır.Bir imleç ayırmanın sonra bir DECLARE sorun deyim imleç yeniden oluşturun.
Transact-SQL imleç etkinliğini izleme
Kullanabileceğiniz sp_cursor_list sistem imleçler listesini, geçerli bir bağlantı ve görünür almak için saklı yordamıylasp_describe_cursor, sp_describe_cursor_columns, and sp_describe_cursor_tables bir imleç özelliklerini belirlemek için.
imleç, @@ CURSOR_ROWS işlev açtıktan sonra veya cursor_rows döndürülen tarafından sütunsp_cursor_list or sp_describe_cursor imleç satır numarasını gösterir.
Her GETIRME deyiminin sonrasına @@ FETCH_STATUS son getirme durumu yansıtacak biçimde güncelleştirildi.Bu durum bilgileri elde edebilirsiniz fetch_status döndürülen tarafından sütunsp_describe_cursor.@@ FETCH_STATUS imleç ilk veya son satırda ötesinde alma gibi koşullara bildirir.@@ FETCH_STATUS, bağlantınız için geneldir ve herhangi bir imleç açık bağlantı üzerindeki her getirme olarak sıfırlanır.Daha sonra durumu bilmesi gerekir, @@ FETCH_STATUS bir kullanıcı değişkenini bağlantıda başka bir deyim yürütülmeden önce kaydedin.Sonraki deyim bir GETIRME olmayabilir olsa bile, INSERT, UPDATE veya DELETE @@ FETCH_STATUS sıfırlama GETIRME deyim içeren bir tetiği harekete olabilir.The fetch_status column returned by sp_describe_cursor is specific to the cursor specified and is not affected by FETCH statements that reference other cursors.sp_describe_cursor is, however, affected by FETCH statements that reference the same cursor, so care is still needed in its use.
Bir ALMA işlemi tamamlandıktan sonra imleç fetched satırda konumlandırılır.Fetched satır geçerli satır bilinir.Imleç salt okunur bir imleç bildirilen, bir UPDATE veya DELETE deyim içeren bir WHERE CURRENT OF çalıştırabilirsiniz. cursor_name Geçerli satırın değiştirmek için yan tümce.
Adı verilen bir Transact-SQL imleç BILDIRMEK CURSOR deyim tarafından global veya yerel olabilir. Genel bir imleç adları, herhangi bir toplu iş, saklı yordam veya aynı bağlantıda tetikleyicisi yürütülüyor tarafından başvurulur.Toplu iş, saklı yordam veya imleç olarak bildirilen bir tetikleyici dışında yerel imleç adları başvurulamaz.Yerel imleç Tetikleyicileri ve saklı yordamlar, bu nedenle saklı yordam veya tetikleyiciyi dışında istenmeyen başvuruları korunuyorsunuz demektir.
Değişken imleç kullanarak
Microsoft SQL Server Ayrıca değişkenleri destekler bir cursor Veri Türü. Bir imleç ile ilişkili bir imleç değişkeniyle iki yöntemden birini:
/* Use DECLARE @local_variable, DECLARE CURSOR and SET. */
DECLARE @MyVariable CURSOR
DECLARE MyCursor CURSOR FOR
SELECT LastName FROM AdventureWorks.Person.Contact
SET @MyVariable = MyCursor
GO
/* Use DECLARE @local_variable and SET */
DECLARE @MyVariable CURSOR
SET @MyVariable = CURSOR SCROLL KEYSET FOR
SELECT LastName FROM AdventureWorks.Person.Contact;
DEALLOCATE MyCursor;
Sonra bir imleç ile ilişkili bir imleç değişkeniimleç yerine, imleç adı değişken kullanılabilir.Transact-SQL imleç deyimleri. Saklı yordam çıkış parametreleri de atanabilecek bir cursor verileri yazın ve bir imleç ile ilişkili. Bu, yerel imleç denetimli bir biçimde göstermek saklı yordamlar sağlar.
Başvuru Transact-SQL imleçler
Transact-SQL imleç adları ve değişkenleri yalnızca tarafından başvurulan Transact-SQL ifadeler; ADO OLE DB ve ODBC API işlevleri tarafından başvurulamaz. Örneğin BILDIRMEK CURSOR kullanıyorsanız ve OPEN bir Transact-SQL imleci, ODBC kullanan bir yolu yoktur SQLFetch or SQLFetchScroll Satır getirme işlevleriniTransact-SQL imleç. Imleç işleme gerekir ve bu Apı'leri kullanan uygulamalar, yerine veritabanı API yerleşik imleç desteği kullanmanız gerekir Transact-SQL imleçlerdir.
Kullanabileceğiniz Transact-SQL FETCH kullanıp bir program değişkenine göre GETIRME döndürülen her sütun bağlama uygulamalarda imleçlerdir. The Transact-SQL FETCH does not support batches, however, so this is the least efficient way to return data to an application.Her satır getirilirken, sunucuyla bir gidiş dönüş gerektirir.Satır getirilirken toplu işlemleri destekleyen bir Apı veritabanına yerleşik imleç işlevini kullanmak daha etkilidir.
Transact-SQL imleçler, saklı yordamları ve tetikleyicileri, oldukça verimlidir.Bu, çünkü her şeyi sunucuda bir yürütme planı içinde derlenir ve satır getirme ile ilişkili ağ trafiği olur.
Transact-SQL işaretçiler ve küme seçenekleri
Içinde SQL Server, bir GETIRME bildirisi var olduğu bir değişiklik değerlerini imleç açıldığı saat olarak kesilirken bir hata ortaya çıkar. Bu hata, planı etkileyen aşağıdaki seçeneklerden birini oluşur veya seçenekleri, dizin oluşturulmuş görünümler için gerekli ve hesaplanan sütunlar.Bir imleç açıkken hatayı önlemek için , küme seçenekleri değiştirmeyin.
Seçenekler'i etkileyen planlayın. |
ARITHABORT numeric_roundabort forceplan QUOTED_IDENTIFIER ANSI_NULL_DFLT_OFF ansi_null_dflt_off ansi_warnings ansi_padding ansi_nulls concat_null_yields_null datefirst dateformat DİL textsize |
Dizin oluşturulmuş görünümler ve hesaplanan sütunlar |
ansi_nulls ansi_padding ansi_warnings ARITHABORT (altında uyumluluk düzeyini 80 veya daha düşük) concat_null_yields_null QUOTED_IDENTIFIER numeric_roundabort |
Içinde SQL Server 2000, diğerleri yaptı ancak ANSI_NULLS ve QUOTED_IDENTIFIER hata artırmak değil.