Transact-SQL İmleçler
Transact-SQLİmleçler esas olarak saklı yordamlar tetikleyiciler, kullanılan ve Transact-SQL komut dosyası içeriğini yaptıkları bir sonuç küme diğer kullanılabilir Transact-SQL deyimleri.
Normal süreci kullanarak bir Transact-SQL imleç bir saklı yordam veya tetikleyiciyi:
Bildirmek Transact-SQL tarafından döndürülen verileri içeren değişkenlerimleç. Sütun her sonuç küme için bir değişken bildirin.Sütunun veri türü sütun tarafından döndürülen değerleri basılı tutarak, bir veri türü için yeterli büyüklükte olması için değişkenleri örtük olarak dönüştürülebilir bildirin.
İlişkilendirme bir Transact-SQL imleç bir deyim kullanarak BİLDİRMEK imleç deyim.BİLDİRMEK İMLEÇ deyim imleç adı ve salt okunur veya salt ileri imleci olup olmadığı gibi imleç özelliklerini de tanımlar.
Aç komutunu deyim select yürütmek için deyim ve imleci doldurmak.
Getirme kişiye getirme INTO deyim satırlar ve her sütun için veri varsa, belirtilen bir değişkene 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ç ile işiniz bittiğinde, Kapat kullanmak deyim.Bir imleç kapatma bazı imleci 's sonuç küme ve onun kilitleri geçerli satırdaki gibi kaynaklarda, ancak imleç yapısı hala açık bir deyim neden yeniden yayımladı işlemek için kullanılabilir.İmleci hala bulunduğundan, imleç adı bu noktada yeniden kullanamazsınız.Tamamen deallocate deyim imleç adı da dahil olmak üzere imleci için ayrılan tüm kaynakları serbest bırakır.Bir imleç ayırmanın kaldırılmasından sonra bir declare deyim imleç yeniden yayımlamalısınız.
Transact-sql imleç etkinliğini izleme
Kullanabileceğiniz sp_cursor_list sistem saklı yordamı geçerli bağlantı görünür imleçler listesini almak için ve sp_describe_cursor, sp_describe_cursor_columns, ve sp_describe_cursor_tables bir imleç özelliklerini belirlemek için.
imleç açıldığında sonra @@ cursor_rows işlev veya cursor_rows tarafından döndürülen sütun sp_cursor_list veya sp_describe_cursor imleci satırların sayısını gösterir.
Her getirme sonra deyim, @@ fetch_status son getirme durumunu yansıtacak şekilde güncelleştirilir.Bu durum bilgileri elde edebilirsiniz fetch_status tarafından döndürülen sütun sp_describe_cursor.@@ fetch_status raporlar ilk veya son satırda ötesinde getiriliyor gibi koşullar imleç.@@ fetch_status bağlantınız için geneldir ve bağlantı için herhangi bir imleç Açılışta her getirme olarak sıfırlanır.Daha sonra durumu bilmesi gerekir, @@ fetch_status bağlantısı üzerinde başka bir deyim yürütülmeden önce bir kullanıcı değişkenini kaydedin.Sonraki deyim bir ALIMI olmayabilir olsa bile, INSERT, update veya delete @@ fetch_status Sıfırla getirme deyimleri 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.
Alım işlemi tamamlandıktan sonra imleç getirilen satırda konumlandırılır.Getirilen satır, geçerli satır bilinir.İmleç salt okunur bir imleç bildirilen, bir where current of ile bir update veya delete deyim yürütmek cursor_name yan tümce tümce tümce değiştirme geçerli satır.
Adı verilen bir Transact-SQL BİLDİRMEK imleç deyim imleçle olabilir ya da global veya yerel.Genel imleç adı, herhangi bir toplu iş, saklı yordam veya aynı bağlantıda tetikleyici yürütme tarafından başvurulur.Toplu iş, saklı yordam veya tetikleyiciyi imleci bildirilen dışında yerel imleç adları başvurulamaz.Tetikleyiciler ve saklı yordamlar yerel imleçler bu nedenle istenmeyen başvuruları saklı yordam veya tetikleyiciyi dışında korunuyorsunuz demektir.
Kullanarak imleç değişken
Microsoft SQL Server also supports variables with a cursor data type.Bir imleç ile ilişkili bir İmleç tarafından iki yöntemden birini değişken:
/* Use DECLARE @local_variable, DECLARE CURSOR and SET. */
DECLARE @MyVariable CURSOR;
DECLARE MyCursor CURSOR FOR
SELECT LastName FROM AdventureWorks2008R2.Person.Person;
SET @MyVariable = MyCursor;
GO
/* Use DECLARE @local_variable and SET */
DECLARE @MyVariable CURSOR;
SET @MyVariable = CURSOR SCROLL KEYSET FOR
SELECT LastName FROM AdventureWorks2008R2.Person.Person;
DEALLOCATE MyCursor;
Bir imleç ile ilişkili sonra bir İmleç değişkeni, İmleç imleç adı yerine değişkeni kullanılabilir Transact-SQL İmleç deyimleri.Saklı yordam çıkış parametreleri de atanabilir bir cursor verileri yazın ve ilişkili bir imleç.Bu yerel imleçler denetimli bir biçimde göstermek saklı yordamlar sağlar.
Transact-sql imleçler baþvurmak
Transact-SQLimleç adları ve değişkenleri başvuru yalnızca Transact-SQL ifadeleri; ole db, odbc ve ado API işlevleri tarafından başvurulamaz.BİLDİRMEK imleç kullanın, örneğin ve açık bir Transact-SQL imlecin odbc kullanmak yolu yoktur SQLFetch veya SQLFetchScroll satırdan getirmek için İşlevler Transact-SQL imleç.İmleç işlemlere gerek ve bu API'leri kullanan uygulamalar yerine veritabanı API yerleşik imleç desteği kullanması gereken Transact-SQL imleçler.
Kullanabileceğiniz Transact-SQL uygulamaları kullanarak getirme ve bağlama her sütun için getirme tarafından döndürülen imleçlerbir program değişken. 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 getiriliyor sunucuya bir gidiş dönüş gerektirir.Kullanmak daha verimli olduğu imleç getirilirken satırlık destekleyen API'lar veritabanına yerleşik işlevleri.
Transact-SQL İmleçler, saklı yordamları ve Tetikleyicileri bulunan son derece verimlidir.Çünkü her şeyi sunucuda bir yürütme planı halinde derlenir ve satırlar getiriliyor ile ilişkilendirilmiş ağ trafiği budur.
Transact-sql İmleçler ve set seçenekleri
De SQL Server, getirme deyim imleç açıldığı saat itibariyle değerlerinde bir değişiklik olduğu kesilirken bir hata ortaya çıkar.Aşağıdaki seçeneklerden herhangi birini plan etkileyen için bu hata oluşur veya seçenekleri gerekli için dizin oluşturulmuş görünümler ve hesaplanan sütunlar.Bir imleç açıkken hatanın oluşmaması için set seçenekleri değiştirmeyin.
Seçenekler 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 VBLONGDATE DİL METİN BOYUTU |
Dizin oluşturulmuş görünümler ve hesaplanan sütunları |
ANSI_NULLS ANSI_PADDING ANSI_WARNINGS ARITHABORT (altında uyumluluk düzey 80 veya daha düşük) CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIER NUMERIC_ROUNDABORT |
De SQL Server 2000, değişiklikleri ANSI_NULLS ve QUOTED_IDENTIFIER değil Yükselt bir hata olsa da diğerleri vermedi.