Sorgu bildirimleri ile çalışma
Sorgu bildirimleri içinde başlandı SQL Server 2005ve SQL ServerNative Client. Sunulan Service Broker altyapı üzerine inşa SQL Server 2005, sorgu bildirimleri izin veri değiştiğinde size bildirilmesini uygulamaları. Bu özellik, bir Web uygulaması gibi bir veritabanından alınan bilgileri bir önbellekte sağlayan ve kaynak veriler değiştiğinde bildirilmesi gereken uygulamalar için çok yararlıdır.
Sorgu bildirimleri bir sorgunun temel aldığı veri değiştiğinde bir belirtilen zaman aşımı süresi içinde Bildirim isteği olanak sağlar. Bildirim isteği, hizmet adı, ileti metnini ve sunucu zaman aşımı değeri bildirim seçenekleri belirtir. Bildirimler, uygulamalar için kullanılabilir bildirim sonlanıp Service Broker sıra ile teslim edilir.
Sorgu bildirimleri seçenekleri dizesi sözdizimi şöyledir:
service=<service-name>[;(local database=<database> | broker instance=<broker instance>)]
Örneğin:
service=mySSBService;local database=mydb
Bildirim Abonelikleri daha uzun yaşamak, bir uygulama olarak başlattığı işlem bildirim abonelik oluşturabilir ve sonra bitirmek. Abonelik geçerli kalır ve zaman aşımı süresi içinde veri değişiklikleri abonelik oluşturulduğu belirtilen bildirim oluşacaktır. Bildirim yürütülen sorgu bildirim seçenekleri ve ileti metni tanımlanır ve zaman aşımı değerini sıfır olarak ayarlayarak iptal olabilir.
Bildirimleri yalnızca bir kez gönderilir. İçin sürekli bildirim veri değişikliği yeni bir abonelik her bildirim işlendikten sonra sorgu Kilitlenmenin tarafından oluşturulmalıdır.
SQL ServerYerel istemci uygulamaları genellikle alma bildirimlerini kullanarak Transact-SQL Al komut bildirim seçenekleri'nde belirtilen hizmet ile ilişkili sıra bildirimleri okuyun.
[!NOT]
Tablo adları için bildirim gereklidir, örneğin, sorgularda nitelikli dbo.myTable. Tablo adları iki bölümü adı ile kalifiye olmalıdır. Abonelik, üç veya dört yarı adlarını kullandıysanız geçersiz.
Bildirim altyapı tanıtılan bir sıralama özelliği üzerine inşa SQL Server 2005. Genel olarak, sunucuda oluşturulan bildirimleri, daha sonra işlenmek üzere bu kuyruklar üzerinden gönderilir. Hakkında daha fazla bilgi için SQL Serveriçin sorgu bildirimleri desteklemek, bakın Using Query Notifications.
Sorgu bildirimleri kullanmak için bir sıra ve hizmet sunucu üzerinde bulunması gerekir. Bunlar kullanılarak oluşturulabilir Transact-SQLaşağıdakine benzer:
CREATE QUEUE myQueue
CREATE SERVICE myService ON QUEUE myQueue
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification])
CREATE QUEUE myQueue
CREATE SERVICE myService ON QUEUE myQueue
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification])
[!NOT]
Hizmet önceden tanımlanmış sözleşme kullanmanız gerekir https://schemas.microsoft.com/SQL/Notifications/PostQueryNotificationyukarıda gösterildiği gibi.
SQL Server Native Client OLE DB Sağlayıcısı
SQL ServerYerel istemci ole db sağlayıcısı satır kümesi değiştirilmesini tüketici bildirimi destekler. Tüketici her aşamasında satır kümesi değişiklik ve teşebbüs herhangi bir değişiklik bildirimi alır.
[!NOT]
Sunucuya ile bildirim sorgusu geçirmeden ICommand::Execute ile sorgu bildirimleri abone olmak için geçerli bir yoldur SQL Serveryerel istemci ole db sağlayıcısını.
dbpropset_sqlserverrowset özellik kümesi
ole db üzerinden sorgu bildirimleri desteklemek için SQL Serveryerel istemci aşağıdaki yeni özellikleri dbpropset_sqlserverrowset özellik kümesi ekler.
Ad |
Tür |
Açıklama |
---|---|---|
SSPROP_QP_NOTIFICATION_TIMEOUT |
VT_UI4 |
Sorgu bildirimdir etkin kalmasını saniye sayısı. 432000 Saniye (5 gün) varsayılandır. En düşük değer 1 saniyedir ve en büyük değer 2 ^ 31-1 saniye. |
SSPROP_QP_NOTIFICATION_MSGTEXT |
VT_BSTR |
Bildirim iletisi metni. Bu kullanıcı tanımlı ve önceden tanımlanmış bir biçimi vardır. Varsayılan olarak, boş dizedir. 1-2000 Karakter kullanarak ileti belirtebilirsiniz. |
SSPROP_QP_NOTIFICATION_OPTIONS |
VT_BSTR |
Sorgu bildirim seçenekleri. Bunlar bir dize ile belirtilen name= value sözdizimi. Kullanıcı, hizmet oluşturma ve sıra dışı bildirimlerini okuma sorumludur. Varsayılan değer boş bir dizedir. |
Bildirim aboneliği her zaman, kullanıcı hareket veya otomatik tamamlama bildirimi olup koştu veya olup deyimi içinde koştu hareket tamamlandıktan veya geri olursa olsun kararlıdır. Sunucu bildirimi aşağıdaki koşullardan herhangi biri geçersiz bildirim yangın: temel veriler veya şema veya zaman aşımı süresi ulaşıldığında; değiştirme hangisi ilk. Onlar ateşlenir en kısa sürede bildirim kayıtları silinir. Onlar daha fazla güncellemeleri almak istemeniz durumunda dolayısıyla bildirimleri aldıktan sonra uygulamayı yeniden abone olmanız gerekir.
Başka bir bağlantı ya da konu hedef sıra için bildirimleri kontrol edebilirsiniz. Örneğin:
WAITFOR (RECEIVE * FROM MyQueue); // Where MyQueue is the queue name.
WAITFOR (RECEIVE * FROM MyQueue); // Where MyQueue is the queue name.
SEÇİN Not * değil sıradan girdi silmek, ancak alırsınız * gelen yok. Sıra boşsa bu sunucu iş parçacığı tezgahları. Arama zaman sıra girişler varsa, bunlar hemen verilir; bir sıra giriş yapılan çağrı aksi halde bekler.
RECEIVE * FROM MyQueue
RECEIVE * FROM MyQueue
Bu deyimi hemen sıra boşsa ayarlamak boş bir sonuç döndürür; Aksi takdirde tüm sıra bildirimleri döndürür.
SSPROP_QP_NOTIFICATION_MSGTEXT ve SSPROP_QP_NOTIFICATION_OPTIONS boş olmayan ve boş olmayan, tds üstbilgi üç özelliklerini içeren yukarıda tanımlanan sorgu bildirimleri her yürütme komutu sunucuya gönderilir. Ya onları boş (veya boş), başlık gönderilmez ve db_e_errorsoccurred geçirilen (veya eğer özellikleri hem db_s_errorsoccurred işaretlenmiş olarak isteğe bağlı), ve durum değerini dbpropstatus_badvalue için ayarlanır. Doğrulama, yürütme/hazırla üzerinde gerçekleşir. Benzer şekilde, db_s_errorsoccured ortaya çıkar, sorgu bildirim özellikleri bağlantılar için ayarlandığında SQL Serversürümleri önce SQL Server 2005. Durum buysa dwStatus değerdir.
Bir abonelik başlatılıyor, sonraki iletileri başarıyla teslim garanti etmez. Ayrıca, onay için belirtilen hizmet adının geçerliliğini yapılır.
[!NOT]
Deyimleri hazırlanıyor asla başlatılan abonelik neden; deyimi yürütme sadece bu elde edecek ve sorgu bildirimleri ole db Çekirdek Hizmetleri kullanımı tarafından etkilenmez.
dbpropset_sqlserverrowset özellik kümesi hakkında daha fazla bilgi için bkz: Satır kümesi özellikleri ve davranışları.
SQL Server yerel istemci odbc sürücüsü
SQL ServerYerel istemci odbc sürücüsü aracılığıyla üç yeni öznitelikler için ek sorgu bildirimleri destekler SQLGetStmtAttr ve SQLSetStmtAttr işlevleri:
SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT
SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS
SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT
SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT ve SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS null değilse, yukarıda tanımlanan üç özniteliği içeren sorgu bildirimleri tds üst sunucuya komut yürütülür her zaman gönderilecektir. Bunlardan biri, boş başlık gönderilmez ve SQL_SUCCESS_WITH_INFO döndürdü. Doğrulama oluşur SQLPrepare işlevi, SqlExecDirect, ve SqlExecute, tüm öznitelikler geçerli değilse, hangi başarısız. Benzer şekilde, bu sorgu bildirim öznitelikleri ayarlandığında için SQL Serversürümleri önce SQL Server 2005, SQL_SUCCESS_WITH_INFO ile yürütme başarısız.
[!NOT]
Deyimleri hazırlamak neden başlatılan; abonelik asla Abonelik deyimi yürütme tarafından başlatılabilir.
Özel durumlar ve sınırlamalar
Aşağıdaki veri türleri için bildirimleri desteklenmez:
text
ntext
image
Bildirim isteği bu türlerinden herhangi birini döndüren bir sorgu yapılırsa, bildirim hemen bildirim aboneliği mümkün olmadığını belirten patlar.
Bir toplu iş veya saklı yordam için bir abonelik isteği yapılırsa, toplu iş veya saklı yordam içinde yürütülen her tablo için ayrı abonelik isteği yapılır. execute deyimlerinin bir bildirim kaydetmez, ancak yürütülen komut Bildirim isteği gönderir. Eğer bir toplu iş, bağlamında yürütülen deyimleri için uygulanacak ve yukarıda açıklanan aynı kurallar geçerlidir.
Aynı veritabanı bağlamında aynı kullanıcı tarafından sunuldu ve aynı şablonu, aynı parametre değerleri, aynı bildirim kimliği ve aynı teslim konumunu varolan bir aktif abonelik bildirim sorgusu sunulması, varolan bir aboneliği, yeni belirtilen zaman aşımı sıfırlama yenileyecektir. Buna benzer sorgular için bildirim istenirse tek bir bildirim gönderilir. Bu bir toplu çoğaltılan bir sorgu veya sorgu içinde birden çok kez çağrıldı saklı yordam geçerli.