CREATE QUEUE (Transact-SQL)

Dotyczy:SQL ServerAzure SQL Managed Instance

Tworzy nową kolejkę w bazie danych. Kolejki przechowują komunikaty. Gdy wiadomość przychodzi dla usługi, Service Broker umieszcza ją w kolejce powiązanej z usługą.

Transact-SQL konwencje składni

Składnia

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 (obiekt)

To nazwa bazy danych, w której tworzy się nową kolejkę. database_name musi określić nazwę istniejącej bazy danych. Gdy database_name nie jest udostępniona, kolejka jest tworzona w bieżącej bazie danych.

schema_name (obiekt)

To nazwa schematu, do którego należy nowa kolejka. Schemat domyślnie przyjmuje domyślny schemat użytkownika wykonującego zalecenie. Jeśli CREATE QUEUE polecenie zostanie wykonane przez członka stałej roli serwera administratora systemu lub członka db_dbowner lub db_ddladmin stałych ról bazy danych w bazie danych określonych przez database_name, schema_name może określić schemat inny niż ten powiązany z logowaniem do bieżącego połączenia. W innym przypadku schema_name musi być domyślnym schematem użytkownika wykonującego zdanie.

queue_name

To nazwa kolejki do tworzenia. Ta nazwa musi spełniać wytyczne dotyczące identyfikatorów SQL Server.

STATUS (kolejka)

Określa, czy kolejka jest dostępna (WŁĄCZONA) czy niedostępna (WYŁĄCZONA). Gdy kolejka jest niedostępna, nie można dodać ani usunąć z niej żadnych komunikatów. Możesz utworzyć kolejkę w stanie niedostępnym, aby uniemożliwić dotarcie wiadomości do kolejki, dopóki kolejka nie zostanie udostępniona za pomocą ALTER QUEUE polecenia. Jeśli ta klauzula zostanie pominięta, domyślnie jest WŁĄCZONA i kolejka jest dostępna.

RETENCJA

Określa ustawienie retencji dla kolejki. Jeśli RETENCJA = WŁĄCZONA, wszystkie wiadomości wysyłane lub odebrane w rozmowach korzystających z tej kolejki pozostają w kolejce aż do zakończenia rozmów. Pozwala to zachować wiadomości do celów audytu lub wykonywać transakcje kompensacyjne w przypadku błędu. Jeśli ta klauzula nie jest określona, ustawienie retencji domyślnie jest wyłączone.

Note

Ustawienie RETENTION = ON może obniżyć wydajność. To ustawienie powinno być używane tylko wtedy, gdy jest wymagane w danym zastosowaniu.

ACTIVATION

Określa informację o tym, którą procedurę przechowywaną trzeba rozpocząć do przetwarzania wiadomości w tej kolejce.

STATUS (Aktywacja)

Określa, czy Service Broker uruchamia procedurę przechowywaną. Gdy STATUS = ON, kolejka rozpoczyna procedurę przechowywaną określoną PROCEDURE_NAME gdy liczba bieżąco działających procedur jest mniejsza niż MAX_QUEUE_READERS i gdy wiadomości docierają do kolejki szybciej niż procedury przechowywane otrzymują wiadomości. Gdy STATUS = WYŁĄCZONE, kolejka nie rozpoczyna procedury przechowywanej. Jeśli ta klauzula nie jest określona, domyślnie jest WŁĄCZONA.

PROCEDURE_NAME = <procedura>

Określa nazwę procedury przechowywanej do rozpoczęcia przetwarzania wiadomości w tej kolejce. Ta wartość musi być identyfikatorem SQL Server.

database_name(procedura) to nazwa bazy danych zawierającej procedurę przechowywaną.

schema_name(procedura) to nazwa schematu zawierającego procedurę przechowywaną.

procedure_name To nazwa procedury przechowywanej.

MAX_QUEUE_READERS =max_readers

Określa maksymalną liczbę instancji procedury aktywacji przechowywanej, które kolejka uruchamia w tym samym czasie. Wartość max_readers musi być liczbą od 0 do 32767.

EXECUTE AS

Określa konto użytkownika bazy SQL Server, pod którym uruchamiana jest procedura aktywacji przechowywanej. SQL Server musi być w stanie sprawdzić uprawnienia tego użytkownika w momencie, gdy kolejka rozpoczyna procedurę przechowywaną. Dla użytkownika domeny serwer musi być połączony z domeną w momencie rozpoczęcia procedury lub niepowodzenia aktywacji. Dla użytkownika SQL Server serwer zawsze może sprawdzić uprawnienia.

SELF Określa, że procedura przechowywana wykonuje się jako aktualny użytkownik. (Główny wykonawca bazy danych wykonujący to CREATE QUEUE zdanie.)

'user_name' to imię użytkownika, pod którym wykonywana jest procedura przechowywana. Parametr user_name musi być ważnym SQL Server użytkownik określony jako identyfikator SQL Server. Obecny użytkownik musi mieć uprawnienia do podszywania się do określonych user_name .

WŁAŚCICIEL Określa, że procedura przechowywana wykonuje się jako właściciel kolejki.

POISON_MESSAGE_HANDLING

Określa, czy obsługa wiadomości trucizny jest włączona dla kolejki. Wartość domyślna to WŁĄCZONE.

Kolejka, w której obsługa trucizny jest ustawiona na WYŁĄCZONE, nie zostanie wyłączona po pięciu kolejnych cofnięciach transakcji. Pozwala to na zdefiniowanie przez aplikację niestandardowego systemu obsługi wiadomości trucizny.

ON grupa plików | [DEFAULT]

Określa grupę plików SQL Server, na której należy utworzyć tę kolejkę. Możesz użyć parametru grupy plików , aby zidentyfikować grupę plików lub użyć identyfikatora DEFAULT , aby użyć domyślnej grupy plików dla bazy brokerów usług. W kontekście tej klauzuli nie DEFAULT jest słowem kluczowym i musi być wyznaczone jako identyfikator. Gdy nie podano grupy plików, kolejka korzysta z domyślnej grupy plików dla bazy danych.

Remarks

Kolejka może być celem instrukcji SELECT. Jednak zawartość kolejki może być modyfikowana tylko za pomocą instrukcji działających na konwersacjach Service Broker, takich jak SEND, RECEIVE, oraz END CONVERSATION. Kolejka nie może być celem INSERTinstrukcji , UPDATE, DELETE, ani TRUNCATE.

Kolejka może nie być obiektem tymczasowym. Dlatego nazwy kolejek zaczynające się od nie # są poprawne.

Tworzenie kolejki w stanie nieaktywnym pozwala przygotować infrastrukturę dla usługi przed otrzymaniem wiadomości w kolejce.

Service Broker nie zatrzymuje procedur przechowywanych aktywacji, gdy w kolejce nie ma żadnych komunikatów. Procedura aktywacji powinna zakończyć się, gdy przez krótki czas w kolejce nie są dostępne żadne komunikaty.

Uprawnienia dla procedury aktywacyjnej są sprawdzane, gdy Service Broker uruchamia procedurę przechowywaną, a nie podczas tworzenia kolejki. Instrukcja ta CREATE QUEUE nie weryfikuje, czy użytkownik określony w klauzuli EXECUTE AS ma uprawnienia do wykonania procedury przechowywanej określonej w klauzuli PROCEDURE NAME.

Gdy kolejka jest niedostępna, Service Broker przechowuje komunikaty dla usług, które korzystają z kolejki w kolejce transmisji bazy danych. Widok sys.transmission_queue katalogu udostępnia widok kolejki transmisji.

Kolejka to obiekt należący do schematu. Kolejki pojawiają się w widoku sys.objects katalogu.

Poniższa tabela przedstawia kolumny w kolejce.

Nazwa kolumny Typ danych Description
status tinyint Stan wiadomości. To RECEIVE wyciąg zwraca wszystkie wiadomości o statusie 1. Jeśli zachowanie wiadomości jest włączone, status jest wtedy ustawiony na 0. Jeśli retencja wiadomości jest wyłączona, wiadomość jest usuwana z kolejki. Wiadomości w kolejce mogą zawierać jedną z następujących wartości:

0=Zachowano wiadomość odebraną
1=Gotowy do odbioru
2=Jeszcze nieukończone
3=Zachowana wiadomość wysłana
priority tinyint Poziom priorytetu przypisany tej wiadomości.
queuing_order bigint Numer kolejki w kolejce.
conversation_group_id uniqueidentifier Identyfikator grupy konwersacyjnej, do której należy ta wiadomość.
conversation_handle uniqueidentifier Omówić rozmowę, której częścią jest ta wiadomość.
message_sequence_number bigint Numer sekwencyjny wiadomości w rozmowie.
service_name nvarchar(128) Nazwa usługi, do której prowadzona jest rozmowa.
service_id int Identyfikator obiektu SQL Server usługi, do której prowadzona jest rozmowa.
service_contract_name nvarchar(128) Nazwa umowy, po której następuje rozmowa.
service_contract_id int Identyfikator obiektu SQL Server kontraktu, po którym następuje rozmowa.
message_type_name nvarchar(128) Nazwa typu wiadomości, który opisuje tę wiadomość.
message_type_id int Identyfikator obiektu SQL Server o typie wiadomości opisującym tę wiadomość.
validation nchar(2) Walidacja użyta dla wiadomości.
E=Puste
N=Brak
X=XML
message_body varbinary(max) Zawartość wiadomości.
message_enqueue_time datetime Czas, gdy wiadomość była w kolejce.

Permissions

Uprawnienia do tworzenia kolejki korzystają z członków db_ddladmindb_owner lub stałych ról bazy danych, albo stałej sysadmin roli serwera.

REFERENCES Uprawnienia do kolejki domyślnie należą do właściciela kolejki, członków db_ddladmindb_owner stałych ról bazy danych lub członków sysadmin stałej roli serwera.

RECEIVE Uprawnienia do kolejki domyślnie mają właściciel kolejki, członkowie stałej roli bazy db_owner danych lub członkowie sysadmin stałej roli serwera.

Examples

A. Stwórz kolejkę bez parametrów

Poniższy przykład tworzy kolejkę dostępną do odbierania wiadomości. Nie określono procedury aktywacji przechowywanej dla kolejki.

CREATE QUEUE ExpenseQueue;

B. Stwórz kolejkę niedostępną

Poniższy przykład tworzy kolejkę, która nie jest dostępna do odbierania wiadomości. Nie określono procedury aktywacji przechowywanej dla kolejki.

CREATE QUEUE ExpenseQueue WITH STATUS=OFF;

C. Stwórz kolejkę i określ wewnętrzne informacje aktywacyjne

Poniższy przykład tworzy kolejkę dostępną do odbierania wiadomości. Kolejka rozpoczyna procedurę expense_procedure przechowywaną, gdy wiadomość wejdzie do kolejki. Procedura przechowywana wykonuje się jako użytkownik ExpenseUser. Kolejka rozpoczyna maksymalną liczbę 5 instancji procedury przechowywanej.

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

D. Stwórz kolejkę na konkretnej grupie plików

Poniższy przykład tworzy kolejkę w grupie ExpenseWorkFileGroupplików .

CREATE QUEUE ExpenseQueue
    ON ExpenseWorkFileGroup;

E. Stwórz kolejkę z wieloma parametrami

Poniższy przykład tworzy kolejkę w grupie DEFAULT plików. Kolejka jest niedostępna. Wiadomości są przechowywane w kolejce aż do zakończenia rozmowy, do której należą. Gdy kolejka jest udostępniona przez ALTER QUEUE, kolejka rozpoczyna procedurę AdventureWorks2022.dbo.expense_procedure przechowywaną do przetwarzania wiadomości. Procedura przechowywana wykonuje się jako użytkownik, który wykonał CREATE QUEUE polecenie. Kolejka rozpoczyna maksymalną liczbę 10 instancji procedury przechowywanej.

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