CREATE QUEUE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

Új sort hoz létre egy adatbázisban. Az üzenetsorok üzeneteket tárolnak. Amikor egy szolgáltatáshoz érkező üzenet érkezik, a Service Broker az üzenetet a szolgáltatáshoz tartozó sorba helyezi.

Transact-SQL szintaxis konvenciók

Szintaxis

CREATE QUEUE <object>
   [ WITH
     [ STATUS = { ON | OFF } [ , ] ]
     [ RETENTION = { ON | OFF } [ , ] ]
     [ ACTIVATION (
         [ STATUS = { ON | OFF } , ]
           PROCEDURE_NAME = <procedure> ,
           MAX_QUEUE_READERS = max_readers ,
           EXECUTE AS { SELF | 'user_name' | OWNER }
            ) [ , ] ]
     [ POISON_MESSAGE_HANDLING (
         [ STATUS = { ON | OFF } ] ) ]
    ]
     [ ON { filegroup | [ DEFAULT ] } ]
[ ; ]

<object> ::=
{ database_name.schema_name.queue_name | schema_name.queue_name | queue_name }

<procedure> ::=
{ database_name.schema_name.stored_procedure_name | schema_name.stored_procedure_name | stored_procedure_name }

Arguments

database_name (tárgy)

Az adatbázis neve, amelyben az új sor létrehozását kell kihozni. database_name meg kell adnia egy meglévő adatbázis nevét. Ha database_name nincs megadva, a sorba a jelenlegi adatbázisban jön létre.

schema_name (tárgy)

Ez annak a sémának a neve, amelyhez az új sor tartozik. A séma alapértelmezett sémát használja annak a felhasználónak, aki végrehajtja az utasítást. Ha az CREATE QUEUE utasítást a rendszergazdálkodó fix szerver szerepének egyik tagja, vagy a database_name által meghatározott adatbázisban lévő db_dbowner vagy db_ddladmin fix adatbázis szerepének tagja hajtja végre, akkor schema_name megadhat olyan sémát, amely nem a jelenlegi kapcsolat bejelentkezéséhez tartozik. Ellenkező esetben schema_name az alapértelmezett séma kell lennie annak a felhasználónak, aki végrehajtja az utasítást.

queue_name

Ez a sor, amit létre kell hozni. Ennek a névnek megfelelnie kell az SQL Server azonosítók irányelveinek.

STATUS (Sor)

Megadja, hogy a sor elérhető-e (ON) vagy nem elérhető (KIKAPCSOLVA). Ha a sor nem elérhető, nem lehet üzenetet hozzáadni vagy eltávolítani a sorból. Létrehozhatod a sort elérhetetlen állapotban, hogy az üzenetek megérkezzenek a sorba, amíg a sort egy ALTER QUEUE nyilatkozattal nem elérhetővé nem válik. Ha ezt a záradék kihagyjuk, az alapértelmezett ON, és a sor elérhető.

MEGTARTÁS

Megadja a sorban lévő megtartási beállítást. Ha MEGTARTÁS = BEKAPCSOLVA, akkor minden olyan üzenet, amelyet a sorban használó beszélgetéseken küldtek vagy kaptak, a sorban maradnak, amíg a beszélgetések véget nem érnek. Ez lehetővé teszi, hogy az üzeneteket auditálási célokra vagy kompenzáló tranzakciókat végezzen, ha hiba történik. Ha ez a záradék nincs megadva, a megtartási beállítás alapértelmezetten OFF lesz.

Megjegyzés:

A RETENTION = ON beállítása csökkentheti a teljesítményt. Ezt a beállítást csak akkor szabad használni, ha az alkalmazás szükséges.

AKTIVÁLÁS

Megadja az információt arról, hogy melyik tárolt eljárást kell elindítani az üzenetek feldolgozásához ebben a sorban.

ÁLLAPOT (Aktiválás)

Megadja, hogy a Service Broker elindítja-e a tárolt eljárást. Ha STATUS = ON, a sor elindítja a PROCEDURE_NAME-vel megadott tárolt eljárást, amikor a jelenleg futó eljárások száma kevesebb, mint MAX_QUEUE_READERS, és amikor az üzenetek gyorsabban érkeznek a sorba, mint a tárolt eljárások üzeneteket kapnak. Ha STATUS = KIKAPCSOLVA, a sor nem indítja el a tárolt eljárást. Ha ez a záradék nincs megadva, az alapértelmezett beállítás ON.

PROCEDURE_NAME = <eljárás>

Megadja a tárolt eljárás nevét, amely elkezdi az üzenetek feldolgozását ebben a sorban. Ennek az értéknek SQL Server azonosítónak kell lennie.

database_name(eljárás) az adatbázis neve, amely tartalmazza a tárolt eljárást.

schema_name(eljárás) a séma neve, amely tartalmazza a tárolt eljárást.

procedure_name Ez a tárolt eljárás neve.

MAX_QUEUE_READERS =max_readers

Megadja az aktiválási tárolt eljárás maximális példányainak számát, amikor a sor egyszerre indul. Az max_readers értékének 0 és32767 között kell lennie.

EXECUTE AS

Megadja az SQL Server adatbázis felhasználói fiókját, amelyen az aktiválási eljárás tárolt eljárás fut. Az SQL Server-nek képesnek kell lennie ellenőrizni ennek a felhasználónak a jogosultságait abban a pillanatban, amikor a sor elindítja a tárolt eljárást. Egy domain felhasználó esetén a szervernek csatlakoznia kell a domainhez, amikor az eljárás elindul, vagy az aktiválás meghibásodik. Egy SQL Server felhasználó esetén a szerver mindig ellenőrizheti a jogosultságokat.

SELF Megadja, hogy a tárolt eljárás az aktuális felhasználóként fut le. (Az adatbázis fő végrehajtja ezt CREATE QUEUE az utasítást.)

'user_name' Az a felhasználó neve, akinek a tárolt eljárás végrehajtja. A user_name paraméternek érvényes SQL Server felhasználónak kell lennie, amely SQL Server azonosítóként van megadva. A jelenlegi felhasználónak IMPERSONATE engedélyt kell biztosítania a megadott user_name számára.

TULAJDONOS Megadja, hogy a tárolt eljárás a sor tulajdonosaként fut le.

POISON_MESSAGE_HANDLING

Megadja, hogy engedélyezve van-e a mérgező üzenetkezelés a sorban. Az alapértelmezett érték be van kapcsolva.

Az a sor, amelynek mérgező üzenetkezelése OFF-ra van állítva, nem lesz letiltva öt egymást követő tranzakcióvisszafordítás után. Ez lehetővé teszi, hogy az alkalmazás egyedi mérgező üzenetkezelő rendszert definiáljon.

ON fájlcsoport | [DEFAULT]

Megadja az SQL Server fájlcsoportot, amelyen ezt a sort létrejött. Használhatod a fájlcsoport paramétert egy fájlcsoport azonosítására, vagy az DEFAULT azonosítóval a szolgáltatási közvetítő adatbázis alapértelmezett fájlcsoportját használhatod. E záradék kontextusában nem DEFAULT kulcsszó, és azonosítóként kell definálni. Ha nincs fájlcsoport, a sor az alapértelmezett fájlcsoportot használja az adatbázisban.

Remarks

Egy sor lehet a SELECT utasítás célpontja. Azonban a sor tartalma csak olyan állításokkal módosítható, amelyek a Service Broker beszélgetéseken működnek, például SEND, RECEIVE, és END CONVERSATION. Egy sor nem lehet célpontja , INSERTUPDATE, DELETE, vagy TRUNCATE utasításnak.

A sor nem feltétlenül ideiglenes objektum. Ezért a sornevek a Sor nevek a Sor Sculus-val # kezdődnek.

Ha inaktív állapotban hozunk létre egy sövét, akkor az infrastruktúra előre elkészül egy szolgáltatáshoz, mielőtt az üzenetek a sorban kapnának.

A Service Broker nem állítja le a tárolt eljárások aktiválását, ha nincsenek üzenetek a sorban. Az aktiválás tárolt eljárásának akkor kell kilépnie, ha rövid ideig nincs elérhető üzenet a sorban.

Az aktiválás tárolt eljárásának jogosultságait akkor ellenőrzik, amikor a Service Broker elindítja a tárolt eljárást, nem pedig a sorban létrejött kor. Az utasítás CREATE QUEUE nem igazolja, hogy a klauzulában megadott EXECUTE AS felhasználó jogosult-e végrehajtani a NAME záradékban megadott tárolt eljárást PROCEDURE .

Ha egy sor nem elérhető, a Service Broker üzeneteket tárol azoknak a szolgáltatásoknak, amelyek az adatbázis átviteli sorában használják. A sys.transmission_queue katalógus nézet az átviteli sorra nézi.

A sor egy séma tulajdonában lévő objektum. A sorok megjelennek a sys.objects katalógus nézetben.

Az alábbi táblázat felsorolja a sorban lévő oszlopokat.

Oszlop név Adattípus Leírás
status tinyint Az üzenet állapota. Az utasítás RECEIVE minden olyan üzenetet ad, amelynek státusza 1. Ha az üzenet megtartása bekapcsolt, akkor az állapot 0-ra van állítva. Ha az üzenettartás nem működik, az üzenet törlődik a sorból. A sorban lévő üzenetek az alábbi értékek egyikét tartalmazhatják:

0=Megőrizve megérkezett üzenet
1=Készen áll a fogadásra
2=Még nem teljes
3=Megmaradt küldött üzenet
priority tinyint Az üzenethez rendelt prioritási szint.
queuing_order bigint Az üzenetsorrend száma a sorban.
conversation_group_id uniqueidentifier Az üzenet által tartozó beszélgetéscsoporthoz tartozó azonosító.
conversation_handle uniqueidentifier A beszélgetés címe, amelynek ez az üzenet része.
message_sequence_number bigint Az üzenet sorszáma a beszélgetésen.
service_name nvarchar(128) A szolgáltatás neve, amelyhez a beszélgetés zajlik.
service_id int SQL Server objektumazonosítója annak a szolgáltatásnak, amelyhez a beszélgetés szól.
service_contract_name nvarchar(128) A szerződés neve, amit a beszélgetés követ.
service_contract_id int SQL Server objektumazonosítója annak a szerződésnek, amelyet a beszélgetés követ.
message_type_name nvarchar(128) Az üzenet típusának neve, amely leírja az üzenetet.
message_type_id int Az SQL Server objektumazonosítója annak az üzenettípusnak, amely leírja az üzenetet.
validation nchar(2) Az üzenethez használt validáció.
E=Üres
N=Nincs
X=XML
message_body varbinary(max) Az üzenet tartalma.
message_enqueue_time datetime Az az idő, amikor az üzenet sorba került.

Permissions

A sor létrehozásához szükséges engedély a fix vagy db_owner fix adatbázis szerepkör tagjaitdb_ddladmin, vagy a sysadmin fix szerver szerepét használja.

REFERENCES A sor engedélye alapértelmezés szerint a sor tulajdonosának, az db_ddladmin OR db_owner fix adatbázis szerepkörének tagjainak vagy a sysadmin fix szerver szerepének tagjainak szól.

RECEIVE A sor jogosultsága alapértelmezetten a sor tulajdonosának, a db_owner fix adatbázis szerepének tagjainak vagy a sysadmin fix szerver szerepének tagjainak szól.

Examples

A. Hozz létre egy sort paraméterek nélkül

A következő példa egy sorba hoz, amely elérhető az üzenetek fogadására. A sorban nincs aktiválási tárolt eljárás.

CREATE QUEUE ExpenseQueue;

B. Létrehozz egy elérhető sort

A következő példa egy olyan sort hoz létre, amely nem elérhető üzenetek fogadására. A sorban nincs aktiválási tárolt eljárás.

CREATE QUEUE ExpenseQueue WITH STATUS=OFF;

C. Hozz létre egy sort, és határozd meg a belső aktivációs információkat

A következő példa egy sorba hoz, amely elérhető az üzenetek fogadására. A sor akkor indítja el a tárolt eljárást expense_procedure , amikor egy üzenet belép a sorba. A tárolt eljárás a felhasználó ExpenseUseráltal fut le . A sor a tárolt eljárás maximális 5 példányait indítja el.

CREATE QUEUE ExpenseQueue
    WITH STATUS=ON,
    ACTIVATION (
        PROCEDURE_NAME = expense_procedure
        , MAX_QUEUE_READERS = 5
        , EXECUTE AS 'ExpenseUser' );

D. Hozz létre egy sort egy adott fájlcsoporton

A következő példa egy sort hoz létre a fájlcsoporton ExpenseWorkFileGroup.

CREATE QUEUE ExpenseQueue
    ON ExpenseWorkFileGroup;

E. Hozz létre egy sort több paraméterrel

A következő példa egy sorba hozza létre a DEFAULT fájlcsoporton. A sor nem elérhető. Az üzenetek a sorban maradnak, amíg a beszélgetés véget nem ér. Amikor a sor elérhetővé válik , ALTER QUEUEa sor elindítja az üzenetek feldolgozására szolgáló tárolt eljárást AdventureWorks2022.dbo.expense_procedure . A tárolt eljárás az a felhasználó fut el, aki futtatta az utasítást CREATE QUEUE . A sor a tárolt eljárás maximális 10 példányait indítja el.

CREATE QUEUE ExpenseQueue
    WITH STATUS = OFF
      , RETENTION = ON
      , ACTIVATION (
          PROCEDURE_NAME = AdventureWorks2022.dbo.expense_procedure
          , MAX_QUEUE_READERS = 10
          , EXECUTE AS SELF )
    ON [DEFAULT];