Son konuşma (Transact-SQL)
Varolan konuşmaya bir tarafı sonlandırır.
Sözdizimi
END CONVERSATION conversation_handle
[ [ WITH ERROR = failure_code DESCRIPTION = 'failure_text' ]
| [ WITH CLEANUP ]
]
[ ; ]
Bağımsız değişkenler
conversation_handle
konuşma tanıtıcısı bir konuşma sona erdirmek için olur.Hata =failure_code
Hata kodudur.failure_code Türü olan int.Konuşma diğer tarafına gönderilen hata iletisinde bulunan kullanıcı tanımlı bir kod hata kodudur.Hata kodu 0'dan büyük olmalıdır.Açıklama =failure_text
Hata iletisidir.failure_text Türü olan nvarchar(3000).Arızası konuşma diğer tarafına gönderilen hata iletisinde bulunan kullanıcı tanımlı metindir.İLE TEMİZLEME
Tüm iletileri ve normalde tamamlanamıyor konuşma bir tarafı için Katalog görünümü girişleri kaldırır.Diğer tarafında görüşme temizlenmesi bildirilmez.Microsoft SQL Serverkonuşma uç noktası, tüm iletiler için iletim sırasındaki konuşma ve görüşme için tüm iletileri hizmet sıraya düşer.Yöneticiler, normalde tamamlanamıyor görüşmeleri kaldırmak için bu seçeneği kullanabilirsiniz.Uzak hizmet kalıcı olarak kaldırılmış, örneğin, bir yönetici ile temizleme görüşmeleri bu hizmetkaldırmak için kullanabilirsiniz.İLE temizleme kodda kullanmayın bir Service Broker uygulama.Bir iletiyi alan alıcı bitiş noktası edene önce Temizleme ile son konuşma çalıştırırsanız, gönderen bitiş noktası iletiyi yeniden gönderin.Bu, büyük olasılıkla iletişim yeniden.
Açıklamalar
Konuşma bitiş konuşma grubu kilitler, sağlanan conversation_handle ait.Konuşma sona erdiğinde, Service Broker kaldırır tüm iletiler için konuşma hizmet sıra.
Görüşme bittikten sonra bir uygulama artık göndermek veya bu konuşmaya iletileri alması.Her iki konuşmada katılımcılar görüşme tamamlamak için son konuşma çağırması gerekir.Service Broker Değil aldığı son iletişim iletisine veya diğer katılımcı görüşme hata iletisi Service Broker diğer katılımcı konuşma sona erdi görüşmesinde bildirir.Konuşma konuşma tanıtıcısı artık geçerli olsa da bu durumda, son nokta için bir konuşma ana ileti uzak hizmet edene kadar örnek etkin kalır.
Service Broker Henüz işledi bir konuşma için bir bitiş iletişim veya hata iletisi Service Broker Konuşma sona erdi konuşma uzak tarafında bildirir.İletiler, Service Broker Uzak hizmet gönderdiği belirtilen seçeneklere bağlıdır:
Hatalar ve Uzaktan konuşmaya olmadan görüşme sona ererse hizmet hala etkin durumda Service Broker türde bir ileti gönderir https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog uzak hizmet.Service BrokerKonuşma sırası iletim sırada bu iletiye ekler.Service BrokerBu konuşma iletim sırada bu iletiyi göndermeden önce olan tüm iletileri gönderir.
Bir hata ile görüşmesini sonlandırır ve konuşma uzak hizmet hala etkin durumda Service Broker türde bir ileti gönderir https://schemas.microsoft.com/SQL/ServiceBroker/Error uzak hizmet.Service BrokerBu konuşmayı diğer iletileri iletim sırada şu anda bırakır.
yan tümce ile temizleme normalde tamamlanamıyor görüşmeleri kaldırmak bir veritabanı yöneticisi sağlar.Bu seçenek, tüm iletileri ve görüşme için Katalog görünümü girişleri kaldırır.Bu durumda, konuşma sona erdi ve bir uygulama tarafından gönderilen, ancak henüz ağ üzerinden iletilen iletileri alabilirsiniz belirti yok konuşma uzak tarafında alır, dikkat edin.Konuşma normal olarak tamamlanamıyor sürece bu seçenek kaçının.
Görüşme bittikten sonra bir Transact-SQL konuşma tanıtıcısı belirten deyim neden göndermek bir Transact-SQL hata.Görüşme, diğer taraftan bu görüşme için iletiler geldiğinde, Service Broker atar bu iletileri.
Uzak hizmet iletileri görüşme için hala gönderilmedi iken görüşme sona ererse, uzaktan hizmet Gönderilmemiş iletileri keser.Bu bir hata sayılmaz ve uzak hizmet iletileri bırakıldı bildirim alır.
Hata kodları hata ile yan tümce tümcesinde belirtilen pozitif sayı olması gerekir.Negatif sayılar için ayrılan Service Broker hata iletileri.Hakkında daha fazla bilgi için Service Broker Bkz: hata iletileri, Broker sistem iletileri.
Son konuşma kullanıcı tanımlı bir işleviçinde geçerli değil.
İzinler
Etkin bir Konuşmayı sona erdirmek için geçerli kullanıcı üye konuşma sahibi olmanız sysadmin sabit sunucu rolü ya da üye db_owner veritabanı rolüsabit.
üye sysadminsabit sunucu rolü ya da üye db_owner zaten tamamlandı konuşma için meta veriler kaldırmak için ile temizleme sabit veritabanı rolü kullanabilir.
Örnekler
A.Konuşma bitiş
Aşağıdaki örnek tarafından belirtilen iletişim sona @dialog_handle.
END CONVERSATION @dialog_handle ;
B.Bir hata ile konuşma bitiş
Aşağıdaki örnek tarafından belirtilen iletişim sona @dialog_handle bir hata durumunda işleme deyim bildiriyor bir hata.Bu hata işlemeiçin simplistic bir yaklaşımdır ve bazı uygulamalar için uygun olmayabilir dikkat edin.
DECLARE @dialog_handle UNIQUEIDENTIFIER,
@ErrorSave INT,
@ErrorDesc NVARCHAR(100) ;
BEGIN TRANSACTION ;
<receive and process message>
SET @ErrorSave = @@ERROR ;
IF (@ErrorSave <> 0)
BEGIN
ROLLBACK TRANSACTION ;
SET @ErrorDesc = N'An error has occurred.' ;
END CONVERSATION @dialog_handle
WITH ERROR = @ErrorSave DESCRIPTION = @ErrorDesc ;
END
ELSE
COMMIT TRANSACTION ;
C.Normalde tamamlanamıyor bir konuşma temizleme
Aşağıdaki örnek tarafından belirtilen iletişim sona @dialog_handle.SQL Serverhemen tüm iletileri hizmet sırası ve iletim sırası hizmetuzak uyarmadan kaldırır.İletişim Temizleme ile biten uzak hizmetbildirimde bulunmaz bu yana yalnızca bu uzak hizmet olmadığı kullanılabilir durumda kullanmanız gereken bir EndDialog veya hata ileti.
END CONVERSATION @dialog_handle WITH CLEANUP ;