Aracılığıyla paylaş


imleç (Transact-SQL) BILDIRIR.

Özniteliklerini tanımlayan birTransact-SQLsunucu imleci, kaydırma davranışını ve sonucu oluşturmak için kullanılan sorgu küme, imleç çalışır,.imleç BİLDİRMEK kabul eder, hem bir sözdizimi ISO standardı ve sözdizimini kullanarak temel bir küme,Transact-SQLuzantıları.

Topic link iconTransact-SQL sözdizimi kuralları

ISO Syntax
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR 
     FOR select_statement 
     [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
[;]
Transact-SQL Extended Syntax
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] 
     [ FORWARD_ONLY | SCROLL ] 
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
     [ TYPE_WARNING ] 
     FOR select_statement 
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]

Bağımsız değişkenler

  • cursor_name
    Is the name of the Transact-SQL server cursor defined.cursor_name must conform to the rules for identifiers.Tanımlayıcılar, kuralları hakkında daha fazla bilgi için bkz:Tanıtıcıları, nesne adları kullanma.

  • BÜYÜK KÜÇÜK HARF DUYARLI
    İmleç tarafından kullanılacak verileri geçici bir kopyasını yapan bir imleç tanımlar.İmleci tüm isteklerine yanıt geçici bu tablodantempdb; bu nedenle, bu imleci yapılan fetches tarafından döndürülen verilerin değil temel tablolarına yapılan değişiklikler yansıtılır ve bu imleç izin değişikliklerini.ISO sözdizimi kullanıldığında INSENSITIVE belirtilmezse, kaydedilmiş siler ve temel tabloları (herhangi bir kullanıcı tarafından) yapılan güncelleştirmeler sonraki fetches yansıtılır.

  • KAYDIRMA
    Tüm seçenekleri alıp belirtir (FIRST, LAST, önceki, NEXT, GÖRECELİ, mutlak) kullanılabilir.NEXT SCROLL BİLDİRMEK bir ISO imleç belirtilmezse, yalnızca getirme seçeneği desteklenmiyor.SCROLL olamaz FAST_FORWARD de belirtilirse, belirtilen.

  • select_statement
    Sonuç tanımlayan standart bir deyim, ayarlı imleç.Anahtar sözcükler COMPUTE, COMPUTE BY, FOR BROWSE ve INTO verilmez içindeselect_statement , bir imleç bildirisi.

    SQL Serverdolaylı olarak imleç, başka bir türe dönüştürür yan tümceleriniselect_statement Çakışma işlevselliğini istenen İmleç türü.Daha fazla bilgi için bkz:Örtülü imleç Dönüşümlerini kullanma.

  • SALT OKUNUR
    Bu imleç ile yapılan güncelleştirmeler engeller.imleç Bir UPDATE veya DELETE deyim WHERE CURRENT OF yan başvuru yapılamaz.Bu seçenek için bir imleç varsayılan özelliğini geçersiz kılar.

  • UPDATE [OF column_name [,...n]]
    Güncellenebilir sütunları tanımlayan imleç.If OF column_name [,... n] belirtilmemişse, değişiklikler yalnızca listelenen sütunlar izin verir.UPDATE bir sütun listesi belirtilirse, tüm sütun güncelleştirilebilir.

  • cursor_name
    Is the name of the Transact-SQL server cursor defined.cursor_name must conform to the rules for identifiers.Tanımlayıcılar, kuralları hakkında daha fazla bilgi için bkz:Tanıtıcıları, nesne adları kullanma.

  • Yerel
    toplu iş iş iş, saklı yordam veya tetikleyiciyi imleci oluşturulduğu yerel imleç kapsamını olduğunu belirtir.imleç Adı, yalnızca bu kapsamda geçerli.İmleci, toplu iş iş iş, depolanmış yordam, tetikleyici veya OUTPUT parametrenin bir saklı yordam yerel imleç değişkenleri olarak başvurulabilir.Bir OUTPUT parametresi, geri arama toplu iş iş, saklı yordamı veya parametre saklı yordamı sonlandırır sonra imleci başvurmak için imleci değişkenine atayabilirsiniz tetikleyici, yerel imleç aktarmak için kullanılır.toplu iş iş iş, saklı yordam veya tetikleyiciyi sonlandırıldığında, imleç geri OUTPUT parametresinde geçildi sürece imleç dolaylı olarak ayırmanın.Bir OUTPUT parametresi geri gönderilir, bu başvuru son ayırmanın veya kapsam dışında imleç ayırmanın.

  • Genel
    İmleci kapsam genel bağlantı olduğunu belirtir.Herhangi bir saklı yordam veya bağlantı tarafından yürütülen toplu iş iş imleç adı başvurulabilir.imleç Bağlantı kesme sırasında yalnızca dolaylı olarak ayırmanın.

    Not

    Genel ya da LOCAL belirtilmezse, varsayılan ayarı ile denetlenirVarsayılan olarak yerel imleç Veritabanı seçenek.InSQL Serversürüm 7.0, bu seçenek varsayılan olarak yanlış eşleşen önceki sürümleri içinSQL Server, tüm imleçler, genel,.Bu seçenek, varsayılan değer, gelecekteki sürümlerinde değişebilirSQL Server.Daha fazla bilgi için bkz:Veritabanı seçeneklerini ayarlama.

  • FORWARD_ONLY
    Belirleyen imleç yalnızca ilk son kaydırılan satır.FETCH NEXT ise yalnızca desteklenen getirme seçeneği.FORWARD_ONLY statik, anahtar KÜMESİ veya DYNAMIC anahtar belirtilirse, imleci DYNAMIC imleç gibi çalışır.FORWARD_ONLY ya da SCROLL belirtildiğinde, statik, dinamik veya anahtar KÜMESİ anahtar sözcükleri belirtilmedikçe FORWARD_ONLY, varsayılandır.STATİK, anahtar KÜMESİ ve DYNAMIC imleçler için SCROLL varsayılan.Farklı veritabanı gibi ODBC ve ADO API FORWARD_ONLY desteklenir ile statik ve dinamik anahtar KÜMESİ,Transact-SQLİmleç.

  • STATİK
    İmleç tarafından kullanılacak verileri geçici bir kopyasını yapan bir imleç tanımlar.İmleci tüm isteklerine yanıt geçici bu tablodantempdb; bu nedenle, bu imleci yapılan fetches tarafından döndürülen verilerin değil temel tablolarına yapılan değişiklikler yansıtılır ve bu imleç izin değişikliklerini.

  • ANAHTAR KÜMESİ
    Üyelik ve imleci satır sırasını imleç açıldığında sabit olduğunu belirtir.küme Satırları benzersiz olarak tanımlayan anahtar bir tablonun yerleşiktempdb known as the keyküme.

    Not

    Sorgunun benzersiz dizin olmayan en az bir tablo başvuruları, anahtar kümesi imleci için statik imleç dönüştürülür.

    İmleci sahibi kayarken imleç sahibi tarafından yapılan veya diğer kullanıcılar tarafından kabul edilen temel tablo değerleri olmayan değişiklikler görülebilir.Diğer kullanıcıların yaptığı ekler görünür değildir (ekler ile yapılması olamaz bir Transact-SQLsunucu imleç).Bir satırın satır getirme girişiminde bir @@ FETCH_STATUS-2 döndürür.Anahtar değerleri dışında güncelleştirmeleri imleç eski satırın bir yeni satır ekleme tarafından izlenen bir silme benzer.Yeni değerlere sahip satır görünür durumda değilse ve eski değerlere sahip satır getirme girişiminde bir @@ FETCH_STATUS-2 döndürür.Güncelleştirme, WHERE CURRENT OF yan tümce belirterek imleç yoluyla yapılır, yeni değerler görülebilir.

  • DİNAMİK
    İmleci kaydırma olarak sonucu satırları için yapılan tüm veri değişiklikleri yansıtan bir imleç tanımlar.Her getirme veri değerleri, sipariş ve üyelik satırları değiştirebilirsiniz.MUTLAK getirme seçeneği ile dinamik imleçler desteklenmez.

  • FAST_FORWARD
    Bir FORWARD_ONLY belirtir, READ_ONLY imleç performansını en iyi duruma getirme etkin.FAST_FORWARD olamaz SCROLL veya FOR_UPDATE de belirtilirse, belirtilen.

    Not

    InSQL Server 2000FAST_FORWARD ve FORWARD_ONLY imleç seçenekleri şunlardır: karşılıklı özel.Her ikisi de belirtilirse, bir hata ortaya çıkar.InSQL Server 2005ve daha sonra her iki anahtar sözcükler kullanılabilir aynı BİLDİRMEK imleç deyim.

  • READ_ONLY
    Bu imleç ile yapılan güncelleştirmeler engeller.imleç Bir UPDATE veya DELETE deyim WHERE CURRENT OF yan başvuru yapılamaz.Bu seçenek için bir imleç varsayılan özelliğini geçersiz kılar.

  • SCROLL_LOCKS
    Specifies that positioned updates or deletes made through the cursor are guaranteed to succeed.SQL Server locks the rows as they are read into the cursor to ensure their availability for later modifications.SCROLL_LOCKS olamaz FAST_FORWARD veya statik de belirtilirse, belirtilen.

  • İYİMSER
    Specifies that positioned updates or deletes made through the cursor do not succeed if the row has been updated since it was read into the cursor.SQL Server does not lock rows as they are read into the cursor.Bunun yerine, karşılaştırmalar kullanırtimestampsütun değerlerini veya bir sağlama toplamı değeri, tablonun var yoktimestampsütun olup satır değiştirildiği sonra imleç. okuma belirlemeSatırı değiştirildi denenen yerleştirilmiş güncelleştirme veya silme başarısız.İYİMSER FAST_FORWARD de belirtilmezse belirtilemez.

  • TYPE_WARNING
    İmleç istemciye gönderilen bir uyarı iletisi belirtirörtülü olarak dönüştürülmesi başka bir istenen türünden.

  • select_statement
    Sonuç tanımlayan standart bir deyim, ayarlı imleç.Anahtar sözcükler COMPUTE, COMPUTE BY, FOR BROWSE ve INTO verilmez içindeselect_statement , bir imleç bildirisi.

    Not

    Kullanabileceğiniz bir sorgu içinde bir imleç bildirim İpucu; OF UPDATE için yan tümcesini de kullanabilirsiniz, ancak seçenek belirtin ( query_hint) FOR UPDATE OF. sonra

    SQL Serverdolaylı olarak imleç, başka bir türe dönüştürür yan tümceleriniselect_statementÇakışma işlevselliğini istenen İmleç türü.Daha fazla bilgi için bkz: imleç Dönüşümlerini kapalı.

  • FOR UPDATE [OF column_name [,...n]]
    Güncellenebilir sütunları tanımlayan imleç.İf OFcolumn_name**,** ... n listelenen sütunlar izin yalnızca değişikliklerin., sağlanan UPDATE belirtilmişse, bir sütun listesi tüm sütunları güncelleştirilmiş, READ_ONLY eşzamanlılık seçeneği belirtilmedikçe.

Remarks

imleç BİLDİRMEK özniteliklerini tanımlayan birTransact-SQLsunucu imleci, kaydırma davranışını ve sonucu oluşturmak için kullanılan sorgu küme, imleç çalışır,.OPEN deyim sonucu dolduran küme, sonuç getirme verir bir satır küme.CLOSE deyimi geçerli sonucu serbest küme imleç ile ilişkili.DEALLOCATE deyim imleç tarafından kullanılan kaynakları serbest bırakır.

CURSOR BİLDİRMEK deyim ilk biçimini, imleç davranışları bildirmek için ISO sözdizimi kullanır.CURSOR BİLDİRMEK ikinci biçiminde kullanılırTransact-SQLuzantıları, izin imleçler ODBC veya ADO veritabanı API imleç işlevlerinde kullanılan aynı imleç türleri kullanarak tanımlayın.

İki karıştırılamaz.imleç anahtar sözcüğü önce SCROLL veya INSENSITIVE anahtar sözcükler belirlemek, İMLECİ arasında için tüm anahtar sözcükleri kullanamazsınızselect_statement anahtar sözcükler. İMLECİ arasında için tüm anahtar sözcükleri belirtinselect_statement anahtar sözcükler, SCROLL veya INSENSITIVE belirtemezsiniz imleç anahtar sözcüğü. önce

Kullanarak imleç BİLDİRMEKTransact-SQLsözdizimi olmayan belirtmek READ_ONLY, OPTIMISTIC veya SCROLL_LOCKS, varsayılan değer aşağıdaki gibidir:

  • deyim güncelleştirmeleri (yeterli izinleri olmayan güncelleştirmeleri ve benzeri uzaktan tabloları erişme) desteklemez, imleç READ_ONLY olur.

  • STATİK ve FAST_FORWARD imleçler varsayılan READ_ONLY.

  • DYNAMIC ve anahtar KÜMESİ imleç varsayılan OPTIMISTIC.

imleç adları başvurulan yalnızca diğerTransact-SQLifadeler.Veritabanı API işlevlerini başvurulamaz.Örneğin, bir imleç bildirmek sonra imleç adı OLE DB ve ODBC ADO işlevler veya yöntemler başvurulamaz.imleç Satır olamaz getirilen API'ler yöntemleri ve alma işlevlerini kullanarak, satırları yalnızca göre getirilmesiTransact-SQLFETCH ifadeleri.

Bir imleç bildirilmiş sonra bu sistem saklı yordamları imleci özelliklerini belirlemek için kullanılabilir.

Sistem saklı yordamları

Açıklama

sp_cursor_list

İmleç bir listesi görünür bağlantı ve öznitelikleri döndürür.

sp_describe_cursor

Bir salt okunur veya kaydırma imleci olup olmadığı gibi bir imleç özniteliklerini açıklar.

sp_describe_cursor_columns

İmleç sonuç sütun özniteliklerini açıklayan küme.

sp_describe_cursor_tables

İmleç tarafından erişilen temel tablolar açıklar.

Değişken bir parçası olarak kullanılabilirselect_statementbildirir, bir imleç.Bir imleç bildirilen sonra imleci değişken değerlerini değiştirin.InSQL Serversürüm 6.5 ve önceki, değişken değerleri yenilenmiş bir imleç açıldığında her saat.

İzinler

Görünümler, tablolar ve imleç içinde kullanılan sütunları SELECT izinlerine sahip herhangi bir kullanıcı için izinler varsayılan CURSOR BİLDİRMEK.

Örnekler

C.Basit bir imleç ve sözdizimini kullanma

Sonuç küme Bu açılış sırasında oluşturulan imleç tablodaki tüm satırları ve tüm sütunları içerir.This cursor can be updated, and all updates and deletes are represented in fetches made against this cursor.FETCHNEXT is the only fetch available because the SCROLL option has not been specified.

DECLARE vend_cursor CURSOR
    FOR SELECT * FROM Purchasing.Vendor
OPEN vend_cursor
FETCH NEXT FROM vend_cursor

B.Rapor çıktı oluşturmak için iç içe imleçleri kullanma

Aşağıdaki örnek, iç nasıl imleçler karmaşık raporlar üretmek için içe olabilir gösterir.Her satıcı için iç imleç bildirildi.

SET NOCOUNT ON

DECLARE @vendor_id int, @vendor_name nvarchar(50),
    @message varchar(80), @product nvarchar(50)

PRINT '-------- Vendor Products Report --------'

DECLARE vendor_cursor CURSOR FOR 
SELECT VendorID, Name
FROM Purchasing.Vendor
WHERE PreferredVendorStatus = 1
ORDER BY VendorID

OPEN vendor_cursor

FETCH NEXT FROM vendor_cursor 
INTO @vendor_id, @vendor_name

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT ' '
    SELECT @message = '----- Products From Vendor: ' + 
        @vendor_name

    PRINT @message

    -- Declare an inner cursor based   
    -- on vendor_id from the outer cursor.

    DECLARE product_cursor CURSOR FOR 
    SELECT v.Name
    FROM Purchasing.ProductVendor pv, Production.Product v
    WHERE pv.ProductID = v.ProductID AND
    pv.VendorID = @vendor_id  -- Variable value from the outer cursor

    OPEN product_cursor
    FETCH NEXT FROM product_cursor INTO @product

    IF @@FETCH_STATUS <> 0 
        PRINT '         <<None>>'     

    WHILE @@FETCH_STATUS = 0
    BEGIN

        SELECT @message = '         ' + @product
        PRINT @message
        FETCH NEXT FROM product_cursor INTO @product
        END

    CLOSE product_cursor
    DEALLOCATE product_cursor
        -- Get the next vendor.
    FETCH NEXT FROM vendor_cursor 
    INTO @vendor_id, @vendor_name
END 
CLOSE vendor_cursor
DEALLOCATE vendor_cursor