Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure 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 üzenet1=Készen áll a fogadásra2=Még nem teljes3=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=ÜresN=NincsX=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];