Udostępnij za pośrednictwem


Praca z powiadomień kwerendy

Kwerendy powiadomień wprowadzono w SQL Server 2005 i SQL Server macierzystego klienta.Stworzone na podstawie infrastruktury Service Broker wprowadzone w SQL Server 2005, powiadomień kwerendy umożliwiają aplikacjom powiadamiany, gdy dane zmieniły.Ta funkcja jest szczególnie użyteczne w przypadku aplikacji, które zapewniają pamięci podręcznej informacje z bazy danych, takich jak aplikacji sieci Web i muszą być powiadamiany, gdy źródło zmienione dane.

Kwerendy powiadomienie umożliwiają zażądać powiadomienie określonym czas-okresu zmiany danych źródłowych kwerendy.Wniosek o powiadomienie określa opcje powiadamiania, które obejmują nazwę usługa, tekst, wiadomości i czas-Brak wartości do serwera.Powiadomienia są dostarczane za pośrednictwem kolejki Service Broker, które aplikacje mogą sondować dostępnych powiadomień.

Składnia ciąg kwerendy powiadomień o opcje jest:

service=<service-name>[;(local database=<database> | broker instance=<broker instance>)]

Na przykład:

service=mySSBService;local database=mydb

Powiadomienie o subskrypcjas outlive proces, który inicjuje je, jak aplikacja może utworzyć powiadomienie subskrypcja , a następnie zakończyć.Subskrypcja pozostaje ważna i powiadomienia wystąpią zmiany danych w czas-okresu określone podczas tworzenia subskrypcji.Powiadomienie jest identyfikowany przez kwerenda została wykonana, opcje powiadamiania i tekst wiadomości i mogą zostać unieważnione, ustawiając jego czas-się wartość zero.

Powiadomienia są wysyłane tylko raz.Ciągłego powiadomienie zmianie danych nowej subskrypcja musi być utworzony przez interwał kwerendy po przetworzeniu każdego powiadomienie.

SQL Server Native Client applications typically receive notifications by using the Transact-SQL RECEIVE command to read notifications from the queue associated with the service specified in the notification options.

Ostrzeżenie

Nazwy tabel musi być kwalifikowany w kwerendach, dla którego powiadomienie jest wymagana, na przykład dbo.myTable.Nazwy tabel musi być kwalifikowany z dwóch części nazwy.Subskrypcja jest nieprawidłowy, jeśli są używane nazwy niepełnym trzech lub czterech.

Infrastruktura powiadomienie jest budowana na górze funkcji kolejkowania, wprowadzone w SQL Server 2005.Ogólnie rzecz biorąc powiadomienia generowane na serwerze są wysyłane za pośrednictwem tych kolejek do późniejszego przetworzenia.Więcej informacji o SQL Server obsługuje kwerendy powiadomień, zobacz Za pomocą kwerendy powiadomień.

Aby użyć kwerendy powiadomień do kolejki i usługa musi istnieć na serwerze.Te mogą być tworzone za pomocą Transact-SQL podobny do następującego:

CREATE QUEUE myQueue
CREATE SERVICE myService ON QUEUE myQueue 

([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification])

Ostrzeżenie

usługa należy użyć wstępnie zdefiniowanych kontrakt https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification powyżej.

Dostawca OLE DB programu SQL Server Native Client

SQL Server Macierzystego klienta dostawca OLE DB obsługuje powiadomienie konsumentów na modyfikacji zestaw wierszy.Konsument odbierze powiadomienie na każdym etapie modyfikacji zestaw wierszy oraz wszelkie próby zmiany.

Ostrzeżenie

Przekazywanie powiadomień kwerendy do serwera z ICommand::Execute jest ważny tylko sposób do subskrybować powiadomień kwerendy z SQL Server macierzystego klienta OLE DB dostawca.

Ustaw właściwość DBPROPSET_SQLSERVERROWSET

Do obsługi powiadomień kwerendy za pośrednictwem OLE DB, SQL Server Native Client dodaje się następujące nowe właściwość do zestaw właściwość DBPROPSET_SQLSERVERROWSET.

Nazwa

Typ

Opis

SSPROP_QP_NOTIFICATION_TIMEOUT

VT_UI4

Liczba sekund, które pozostają aktywne powiadomienie kwerendy.

Wartość domyślna to 432000 sekund (5 dni).Wartością minimalną jest 1 sekundy, a wartość maksymalna jest 2 ^ 31-1 sekundy.

SSPROP_QP_NOTIFICATION_MSGTEXT

VT_BSTR

Tekst komunikatu powiadomienie.To jest zdefiniowane przez użytkownika i nie ma wstępnie zdefiniowanego formatu.

Domyślnie ciąg jest pusty.Można określić wiadomości przy użyciu 1 2000 znaków.

SSPROP_QP_NOTIFICATION_OPTIONS

VT_BSTR

Kwerenda powiadomienie opcje.Określono w ciąg z nazwę=wartość składni.Użytkownik jest odpowiedzialny za tworzenie usługa i odczytywania powiadomień z kolejki.

Domyślnie jest puste ciąg.

Subskrypcja powiadomienie jest zawsze popełnione, niezależnie od tego, czy instrukcja uruchomiono w zatwierdzanie użytkownika lub automatycznego zatwierdzanie lub czy zatwierdzanie, w którym uruchomiono instrukcji przekazana lub wycofana.Powiadomienie serwera fires na jeden z następujących warunków nieprawidłowy powiadomienia: zmiany danych podstawowych lub schematu lub po przekroczeniu limitu czasu; nastąpi pierwszy.Rejestracje powiadomienia skreśla się zaraz po ich uruchomienia.Stąd po otrzymaniu powiadomienia, aplikacja musi subskrybować ponownie przypadek, gdy chcą uzyskać dalsze aktualizacje.

Można sprawdzić innego połączenia lub wątek obiekt docelowy kolejce powiadomień.Na przykład:

WAITFOR (RECEIVE * FROM MyQueue);   // Where MyQueue is the queue name. 

Należy zauważyć, że wybierz * nie usunąć wpis z kolejki, otrzymać * Z wykonuje.Zatrzymuje wątek serwera, jeśli kolejka jest pusta.Jeżeli istnieją zapisy kolejki w czas rozmowy, są zwracane natychmiast; w przeciwnym wypadku wywołanie czeka, aż dokonuje się wpisu kolejki.

RECEIVE * FROM MyQueue

Ta instrukcja natychmiast zwraca pusty zestaw wyników Jeśli kolejka jest pusta; w przeciwnym razie zwraca wszystkie powiadomienia kolejki.

Jeśli SSPROP_QP_NOTIFICATION_MSGTEXT i SSPROP_QP_NOTIFICATION_OPTIONS są NIEZEROWE i niepustych, powiadomień kwerendy TDS nagłówka zawierającego trzy właściwości zdefiniowane powyżej są wysyłane do serwera z każdego wykonanie polecenia.Jeśli jeden z nich jest null (lub puste), nagłówek nie jest wysyłana i wywoływane DB_E_ERRORSOCCURRED (lub DB_S_ERRORSOCCURRED, jeśli właściwości są oznaczone jako opcjonalne), a wartość stanu zestaw do DBPROPSTATUS_BADVALUE.Sprawdzanie poprawności występuje na wykonywanie i przygotowania.Podobnie, DB_S_ERRORSOCCURED jest wywoływane, gdy są właściwości kwerendy powiadomienie zestaw dla połączeń z SQL Server wersji przed SQL Server 2005.W tym przypadek wartość stanu jest DBPROPSTATUS_NOTSUPPORTED.

Inicjowanie subskrypcja nie gwarantuje zostanie pomyślnie dostarczona kolejnych wiadomości.Ponadto nie jest dokonane sprawdzenie ważności określona nazwa usługa.

Ostrzeżenie

Przygotowywanie sprawozdań nigdy nie spowoduje subskrypcja inicjowane; będzie to osiągnąć jedynie wykonanie instrukcja i korzystanie z usług podstawowych OLE DB nie dotyczy powiadomień kwerendy.

Aby uzyskać więcej informacji na temat zestaw właściwość DBPROPSET_SQLSERVERROWSET Zobacz Zestaw wierszy właściwości i zachowania.

Sterownik ODBC macierzystym klienta SQL Server

SQL Server Sterownik ODBC Klient macierzysty obsługuje kwerendy powiadomień przez dodanie trzech nowych atrybutów SQLGetStmtAttr i SQLSetStmtAttr funkcje:

  • SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT

  • SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS

  • SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT

Jeśli SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT i SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS nie mają wartości NULL, zawierający trzy atrybuty zdefiniowane powyżej nagłówka TDS kwerendy powiadomień będą wysyłane do serwera każdego czas polecenie jest wykonywane.Jeśli jeden z nich jest null, nagłówek nie jest wysyłana i zwracana jest wartość SQL_SUCCESS_WITH_INFO.Sprawdzanie występuje na SQLPrepare, SqlExecDirect, i SqlExecute, wszystkie z którym się niepowodzeniem, jeśli atrybuty nie są prawidłowe.Podobnie, gdy te atrybuty powiadomienie kwerendy są zestaw dla SQL Server wersji przed SQL Server 2005, wykonanie kończy się niepowodzeniem z wartość SQL_SUCCESS_WITH_INFO.

Ostrzeżenie

Przygotowanie sprawozdania nigdy nie będzie powodować subskrypcja inicjowane; subskrypcja mogą być inicjowane przez wykonanie instrukcja.

Szczególne przypadki i ograniczenia

Następujące typy danych nie są obsługiwane dla powiadomień:

  • text

  • ntext

  • image

Jeśli powiadomienie żądanie kwerendy, która zwraca tych typów, powiadomienie fires natychmiast, określając subskrypcja powiadomienie nie było możliwe.

Jeśli się żądanie subskrypcja dla programu wsadowego lub procedura składowana zostanie zgłoszone żądanie subskrypcja oddzielne dla każdego instrukcja wykonywane w ramach programu wsadowego lub procedura składowana.WYKONYWANIE instrukcji nie zarejestruje powiadomienie, ale wykonane polecenie wyśle żądanie powiadomienie.Jeśli jest to partia, kontekście zostaną zastosowane do wykonanej instrukcji i obowiązują te same zasady opisane powyżej.

Przesłania kwerendy powiadomienie została przedłożona przez samego użytkownika w tym samym kontekście bazy danych i ma tego samego szablonu, tej samej wartości parametrów, ten sam identyfikator powiadomienie i tej samej lokalizacji dostarczania istniejących subskrypcja active odnowi istniejącej subskrypcja, resetowanie nowe określone czas-limit.Oznacza to, że jeżeli notyfikacja jest wnioskowana identyczne kwerend, tylko jedno powiadomienie zostanie wysłane.Ma to zastosowanie kwerendy zduplikowane w partia lub kwerendy w procedura składowana , została wywołana wiele razy.