Megosztás a következőn keresztül:


Lekérdezési értesítések használata

A következőkre vonatkozik:SQL Server

OLE DB-illesztő letöltése

A lekérdezési értesítéseket az SQL Server 2005 (9.x) és az SQL Server OLE DB-illesztőjében vezettük be. Az SQL Server 2005 -ben bevezetett SQL Service Broker-infrastruktúrára (9.x) épülő lekérdezési értesítések lehetővé teszik az alkalmazások értesítését az adatok módosításakor. Ez a funkció olyan alkalmazások esetében hasznos, amelyek egy adatbázisból, például egy webalkalmazásból származó információk gyorsítótárát biztosítják, és a forrásadatok módosításakor értesíteni kell.

A lekérdezési értesítések használatával értesítéseket kérhet egy adott időtúllépési időszakon belül, amikor a lekérdezés alapjául szolgáló adatok megváltoznak. A kérés megadja az értesítési beállításokat, amelyek tartalmazzák a kiszolgáló szolgáltatásnevét, üzenetszövegét és időtúllépési értékét. Az értesítések egy Service Broker-üzenetsoron keresztül érkeznek, amelyet az alkalmazások lekérdezhetnek az elérhető értesítésekhez.

A lekérdezési értesítések beállítási sztringjének szintaxisa a következő:

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

Például:

service=mySSBService;local database=mydb

Az értesítési előfizetések túllépnek az indításukon. Ennek az az oka, hogy egy alkalmazás létrehozhat egy értesítési előfizetést, majd véget vethet. Az előfizetés érvényes marad, és az értesítés akkor történik, ha az adatok a megadott időkorláton belül változnak. Az értesítéseket a végrehajtott lekérdezés, az értesítési beállítások és az üzenet szövege azonosítja. Az időtúllépési érték nullára állításával megszakítható.

Az értesítéseket csak egyszer küldi el a rendszer. Ha folyamatosan értesülni szeretne az adatváltozásokról, hozzon létre egy új előfizetést úgy, hogy az egyes értesítések feldolgozása után újra végrehajtja a lekérdezést.

Az SQL Server-alkalmazások OLE DB-illesztőprogramja általában a Transact-SQL RECEIVE paranccsal kap értesítéseket. Ezzel a paranccsal olvassa be az értesítési beállításokban megadott szolgáltatáshoz társított üzenetsor értesítéseit.

Jegyzet

A táblaneveket olyan lekérdezésekben kell minősíteni, amelyekhez értesítés szükséges. Például dbo.myTable. A táblaneveket kétrészes névvel kell minősíteni. Az előfizetés érvénytelen, ha három- vagy négyrészes nevet használ.

Az értesítési infrastruktúra az SQL Server 2005-ben (9.x) bevezetett üzenetsor-kezelési funkcióra épül. A kiszolgálón generált értesítések általában ezeken az üzenetsorokon keresztül lesznek elküldve, amelyeket később kell feldolgozni.

A lekérdezési értesítések használatához egy üzenetsornak és egy szolgáltatásnak kell léteznie a kiszolgálón. Ezek az elemek a Transact-SQL paranccsal hozhatók létre, az alábbihoz hasonlóan:

CREATE QUEUE myQueue
CREATE SERVICE myService ON QUEUE myQueue
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification])

Jegyzet

A szolgáltatásnak az előre meghatározott szerződést kell használnia, a fentieknek megfelelően.

OLE DB-illesztő az SQL Serverhez

Az SQL Serverhez készült OLE DB-illesztő támogatja a fogyasztói értesítéseket a sorkészlet módosításakor. A fogyasztó értesítést kap a sorkészlet módosításának minden fázisáról és a módosítási kísérletekről.

Jegyzet

Értesítési lekérdezés továbbítása a kiszolgálónak ICommand::A végrehajtása az egyetlen érvényes módja annak, hogy az SQL Server OLE DB-illesztőprogramjával feliratkozzon a lekérdezési értesítésekre.

DBPROPSET_SQLSERVERROWSET tulajdonságkészlet

Ha az OLE DB-en keresztül szeretné támogatni a lekérdezési értesítéseket, az SQL Server OLE DB-illesztőprogramja a következő új tulajdonságokat adja hozzá a DBPROPSET_SQLSERVERROWSET tulajdonságkészlethez.

Név Típus Leírás
SSPROP_QP_NOTIFICATION_TIMEOUT VT_UI4 Azon másodpercek száma, amikor a lekérdezésértesítés aktív marad.

Az alapértelmezett érték 432 000 másodperc (5 nap). A minimális érték 1 másodperc, a maximális érték pedig 2^31-1 másodperc.
SSPROP_QP_NOTIFICATION_MSGTEXT VT_BSTR Az értesítés üzenetszövege. Ez a szöveg felhasználó által definiált, és nincs előre definiált formátuma.

Alapértelmezés szerint a sztring üres. Adjon meg egy üzenetet 1–2000 karakter használatával.
SSPROP_QP_NOTIFICATION_OPTIONS VT_BSTR A lekérdezés értesítési beállításai. Ezek a beállítások egy névvel=érték szintaxissal rendelkező sztringben vannak megadva. A felhasználó feladata a szolgáltatás létrehozása és az értesítések olvasása az üzenetsorból.

Az alapértelmezett érték egy üres sztring.

Az értesítési előfizetés mindig véglegesített. Ez attól függetlenül történik, hogy az utasítás egy felhasználói tranzakcióban vagy automatikus közleményben futott-e, vagy az a tranzakció, amelyben az utasítás lekötött vagy vissza lett állítva. A kiszolgáló értesítése a következő érvénytelen értesítési feltételek bármelyike esetén aktiválódik: a mögöttes adatok vagy séma módosítása, illetve az időtúllépési időszak elérése; amelyik az első.

Az értesítési regisztrációk az aktiválásuk után azonnal törlődnek. Így az értesítések fogadása után az alkalmazásnak újra elő kell fizetnie, ha további frissítéseket szeretne kapni.

Egy másik kapcsolat vagy szál ellenőrizheti a célsor értesítéseit. Például:

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

Jegyzet

SELECT * nem törli a bejegyzést az üzenetsorból. Azonban RECEIVE * FROM igen. Ez elakad egy kiszolgálószálon, ha az üzenetsor üres. Ha a hívás időpontjában vannak üzenetsor-bejegyzések, a rendszer azonnal visszaadja őket. Ellenkező esetben a hívás megvárja az üzenetsor-bejegyzést.

RECEIVE * FROM MyQueue

Ez az utasítás azonnal üres eredményhalmazt ad vissza, ha az üzenetsor üres. Ellenkező esetben az összes üzenetsor-értesítést visszaadja.

Ha SSPROP_QP_NOTIFICATION_MSGTEXT és SSPROP_QP_NOTIFICATION_OPTIONS nem null értékűek és nem üresek, a lekérdezésértesítések TDS-fejléce, amely a fent definiált három tulajdonságot tartalmazza, a rendszer elküldi a kiszolgálónak. Ezt a fejlécet a rendszer a parancs minden egyes végrehajtásával elküldi. Ha bármelyikük null (vagy üres), akkor a fejléc nem lesz elküldve, és DB_E_ERRORSOCCURRED lesz emelve (vagy DB_S_ERRORSOCCURRED, ha a tulajdonságok nem kötelezőként vannak megjelölve). Az állapotérték ezután DBPROPSTATUS_BADVALUEértékre van állítva. Az ellenőrzés végrehajtáskor és előkészítéskor történik. Hasonlóképpen DB_S_ERRORSOCCURRED akkor jön létre, amikor a lekérdezésértesítési tulajdonságok be vannak állítva az SQL Server 2005 előtti SQL Server-verziókhoz való kapcsolatokhoz (9.x). Ebben az esetben az állapotérték DBPROPSTATUS_NOTSUPPORTED.

Az előfizetés indítása nem garantálja a jövőbeli üzenetek sikeres kézbesítését. Emellett nem történik ellenőrzés a megadott szolgáltatásnév érvényességét illetően.

Jegyzet

Az utasítások előkészítése soha nem fogja kezdeményezni az előfizetést. Csak az utasítás végrehajtása ér el kezdeményezést. A lekérdezési értesítéseket az OLE DB alapvető szolgáltatásai nem befolyásolják.

A DBPROPSET_SQLSERVERROWSET tulajdonságkészlettel kapcsolatos további információkért lásd Sorhalmaz tulajdonságai és viselkedésecímű témakört.

Lásd még:

OLE DB-illesztő sql serveres szolgáltatásokhoz