Przy użyciu kursor, typ danych w parametr wyjściowy
Transact-SQLprocedury przechowywane za pomocą cursor Typ danych tylko dla parametrów wyjściowych.Jeśli cursor Typ danych jest określony dla parametru, są wymagane parametry VARYING i wyjście.Jeśli określono parametr VARYING słowo kluczowe, typ danych musi być cursor i muszą być określone słowo kluczowe dane wyjściowe.
Ostrzeżenie
cursor Typ danych nie może być powiązane zmienne aplikacji za pośrednictwem interfejsów API, takie jak OLE DB, ODBC, ADO i DB bazy danych-Biblioteka.Ponieważ parametry wyjściowe muszą być powiązane przed aplikacji można wykonać procedura składowana, procedur przechowywanych o cursor Parametry wyjściowe nie może być wywołana z bazy danych API.Procedury te mogą być wywoływane z Transact-SQL partii, procedurach przechowywanych lub wyzwala tylko wtedy, gdy cursor dane wyjściowe zmienna jest przypisana do Transact-SQL lokalnego cursor zmiennej.
Parametry wyjściowe kursora
Następujące zasady odnoszą się do cursor Parametry wyjściowe, gdy procedura jest wykonywana:
Dla kursor progresywny, wierszy zwracanych zestaw wyników kursora są tylko wiersze na i poza położenie kursora po zakończeniu procedura składowana, wykonywane, na przykład:
Kursor nonscrollable jest otwierany w procedurze zestaw wyników o nazwie RS 100 wierszy.
Procedura pobiera pierwszych 5 wierszy zestaw wyników R.
Procedura przywraca wywołującego.
Zestaw wyników zwróconych RS składa się z wierszy od 6 do 100 RS i ustaw kursor wywołujący jest umieszczony przed pierwszym wierszu RS.
Dla kursor progresywny, jeśli kursor jest umieszczony przed pierwszym wierszu po zakończeniu procedura składowana, cały zestaw wyników jest zwracana do partia wywołującego, procedura składowana lub wyzwalacza.Zwracane, położenie kursor jest zestaw przed pierwszym wierszem.
Dla kursor progresywny, jeśli kursor znajduje się poza koniec ostatniego wiersza po zakończeniu procedura składowana, zestaw wyników pusty jest zwracana do wywoływania partia, procedura składowana lub wyzwalacza.
Ostrzeżenie
Zestaw wyników puste nie jest taka sama jak wartość null.
Przewijalne kursor wszystkich wierszy zestaw wyników są zwracane do wywoływania partia, procedura składowana lub wyzwalacza po zakończeniu wykonywania procedura składowana.Zwracane, pozycja kursor pozostaje w pozycji ostatniego pobrania wykonywane w procedurze.
Dla dowolnego typu kursora Jeśli kursor zostanie zamknięty, następnie wartość null jest przekazywana z powrotem do wywoływania partia, procedura składowana lub wyzwalacza.Będzie również przypadek jeśli kursor jest przypisany do danego parametru, ale że kursor nie jest otwarty.
Ostrzeżenie
W stanie zamkniętym sprawach tylko na powrót czas.Na przykład prawidłowego zamknięcia kursor część sposób poprzez procedurę go otworzyć ponownie w procedurze i powrócić, że zestaw wyników jego kursor do wywołujący jest partia, procedura składowana lub wyzwalacza.
Przykład
W poniższym przykładzie procedura składowana jest tworzona określonej parametrem wyjściowym, @currency_cursor za pomocą cursor typu danych.procedura składowana jest następnie wywoływana w partia
Najpierw należy utworzyć procedurę, która deklaruje i otwarcie kursor w tabela Waluta.
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ( 'dbo.uspCurrencyCursor', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.uspCurrencyCursor;
GO
CREATE PROCEDURE dbo.uspCurrencyCursor
@CurrencyCursor CURSOR VARYING OUTPUT
AS
SET NOCOUNT ON;
SET @CurrencyCursor = CURSOR
FORWARD_ONLY STATIC FOR
SELECT CurrencyCode, Name
FROM Sales.Currency;
OPEN @CurrencyCursor;
GO
Następnie należy wykonać partia który deklaruje zmienną kursora lokalnego, wykonuje procedurę przypisywania kursor do zmiennej lokalnej i następnie pobiera wierszy z kursora.
USE AdventureWorks2008R2;
GO
DECLARE @MyCursor CURSOR;
EXEC dbo.uspCurrencyCursor @CurrencyCursor = @MyCursor OUTPUT;
WHILE (@@FETCH_STATUS = 0)
BEGIN;
FETCH NEXT FROM @MyCursor;
END;
CLOSE @MyCursor;
DEALLOCATE @MyCursor;
GO
Zobacz także