CURSOR_STATUS (Transact-SQL)

Скалярная функция, позволяющая сущности, вызвавшей хранимую процедуру, определить, вернула ли процедура курсор и результирующий набор для конкретного аргумента.

Значок ссылки на разделСоглашения о синтаксисе в Transact-SQL

Синтаксис

CURSOR_STATUS 
          ( 
               { 'local' , 'cursor_name' } 
          | { 'global' , 'cursor_name' } 
          | { 'variable' , 'cursor_variable' } 
          ) 

Аргументы

  • 'local'
    Константа, показывающая, что источник курсора — это имя локального курсора.
  • 'cursor_name'
    Имя курсора. Имя курсора должно соответствовать требованиям, предъявляемым к идентификаторам.
  • 'global'
    Константа, показывающая, что источник курсора — это имя глобального курсора.
  • 'variable'
    Константа, показывающая, что источник курсора — это локальная переменная.
  • 'cursor_variable'
    Имя переменной курсора. Переменная курсора должна быть определена как тип данных cursor.

Тип возвращаемых данных

smallint

Возвращаемое значение Имя курсора Переменная курсора

1

Результирующий набор курсора включает как минимум одну строку.

В случае статических и управляемых набором ключей курсоров результирующий набор включает как минимум одну строку.

В случае динамических курсоров результирующий набор может включать одну или более строк или не включать их.

Курсор, выделенный этой переменной, открыт.

В случае статических и управляемых набором ключей курсоров результирующий набор включает как минимум одну строку.

В случае динамических курсоров результирующий набор может включать одну или более строк или не включать их.

0

Результирующий набор курсора пуст.*

Курсор, выделенный этой переменной, открыт, но результирующий набор пуст.*

-1

Курсор закрыт.

Курсор, выделенный этой переменной, закрыт.

-2

Не применимо.

Возможны следующие варианты:

ранее вызванная процедура не назначила этой переменной с аргументом OUTPUT никакой курсор;

ранее вызванная процедура назначила этой переменной с аргументом OUTPUT курсор, но при завершении процедуры он находился в закрытом состоянии. Таким образом, курсор освобождается и не возвращается вызвавшей процедуре.

Объявленной переменной курсора никакой курсор не назначен.

-3

Курсор с указанным именем не существует.

Переменная курсора с указанным именем не существует или существует, но ей еще не выделен курсор.

*Динамические курсоры никогда не возвращают этот результат.

Примеры

В следующем примере создается процедура lake_list, и возвращаемые ею результаты используются для проверки статуса курсора.

ms177609.note(ru-ru,SQL.90).gifПримечание.
Этот код зависит от процедуры check_authority, которая не была создана.
IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'lake_list' AND type = 'P')
   DROP PROCEDURE lake_list
GO
CREATE PROCEDURE lake_list
   ( @region varchar(30),
     @size integer,
     @lake_list_cursor CURSOR VARYING OUTPUT )
AS 
BEGIN
   DECLARE @ok SMALLINT
   EXECUTE check_authority @region, username, @ok OUTPUT
   IF @ok = 1
      BEGIN
      SET @lake_list_cursor = CURSOR LOCAL SCROLL FOR
         SELECT name, lat, long, size, boat_launch, cost
         FROM lake_inventory
         WHERE locale = @region AND area >= @size
         ORDER BY name
      OPEN @lake_list_cursor
      END
END
DECLARE @my_lakes_cursor CURSOR
DECLARE @my_region char(30)
SET @my_region = 'Northern Ontario'
EXECUTE lake_list @my_region, 500, @my_lakes_cursor OUTPUT
IF Cursor_Status('variable', '@my_lakes_cursor') <= 0
   BEGIN
   /* Some code to tell the user that there is no list of
   Lakes. */
   END
ELSE
   BEGIN
      FETCH @my_lakes_cursor INTO -- Destination here
      -- Continue with other code here.
END

См. также

Справочник

Функции работы с курсорами (Transact-SQL)
Типы данных (Transact-SQL)

Другие ресурсы

Использование идентификаторов в качестве имен объектов

Справка и поддержка

Получение помощи по SQL Server 2005