Главная / Базы данных /
Программирование в Microsoft SQL Server 2000 / Тест 27
Программирование в Microsoft SQL Server 2000 - тест 27
Упражнение 1:
Номер 1
SQL Server 2000 поддерживает различные типы курсоров:
Ответ:
 (1) курсоры API (курсоры программного интерфейса приложений) 
 (2) курсоры OLE 
 (3) курсоры T-SQL 
 (4) ODBC-курсоры 
 (5) на основе утилиты Query Analyzer 
Номер 2
Курсоры T-SQL создаются с помощью команды:
Ответ:
 (1) CREATE CURSOR
 
 (2) DECLARE CURSOR
 
 (3) DECLARE VIRTUAL VIEW
 
Номер 3
При создании курсора T-SQL на команду SELECT
накладываются ограничения:
Ответ:
 (1) команда SELECT
не может возвращать несколько результирующих множеств 
 (2) команда SELECT
не может содержать фраз ORDER BY и HAVING
 
 (3) команда SELECT
не может содержать фразу COMPUTE или COMPUTE BY
, используемые для агрегирования результатов 
 (4) команда SELECT
не может содержать фразу INTO
для создания новой таблицы 
 (5) невозможность использования фразы WHERE
 
Упражнение 2:
Номер 1
Под чувствительностью курсора следует понимать:
Ответ:
 (1) способность осуществления прокрутки как вперед, так и назад, либо только вперед 
 (2) быстродействие курсора 
 (3) cпособность курсора отражать изменения в данных 
Номер 2
Под прокруткой курсора следует понимать:
Ответ:
 (1) cпособность курсора отражать изменения в данных 
 (2) способность осуществления прокрутки как вперед, так и назад, либо только вперед 
 (3) возможность обновления строк курсором 
Номер 3
Под обновлением курсора следует понимать:
Ответ:
 (1) возможность обновления строк курсором 
 (2) способность осуществления прокрутки как вперед, так и назад, либо только вперед 
 (3) cпособность курсора отражать изменения в данных 
Упражнение 3:
Номер 1
Статические курсоры характеризуются тем, что:
Ответ:
 (1) копируют в базу tempdb только те столбцы, которые уникально идентифицируют каждую строку 
 (2) ведут себя так, как если бы при каждом обращении к строке повторно выполнялся оператор SELECT
 
 (3) делают как бы моментальный снимок данных, задаваемых оператором SELECT
, и хранят их в базе данных tempdb 
Номер 2
Ключевые курсоры характеризуются тем, что:
Ответ:
 (1) делают как бы моментальный снимок данных, задаваемых оператором SELECT
, и хранят их в базе данных tempdb 
 (2) копируют в базу tempdb только те столбцы, которые уникально идентифицируют каждую строку 
 (3) допускают только чтение. Эти виды курсора объявляются с использованием ключевого слова FAST_FORWARD
, и чаще всего их называют "пожарными" курсорами 
Номер 3
Динамические курсоры характеризуются тем, что:
Ответ:
 (1) ведут себя так, как если бы при каждом обращении к строке повторно выполнялся оператор SELECT
 
 (2) делают как бы моментальный снимок данных, задаваемых оператором SELECT
, и хранят их в базе данных tempdb 
 (3) допускают только чтение. Эти виды курсора объявляются с использованием ключевого слова FAST_FORWARD
, и чаще всего их называют "пожарными" курсорами 
Номер 4
Курсоры быстрого доступа характеризуются тем, что:
Ответ:
 (1) допускают только чтение. Эти виды курсора объявляются с использованием ключевого слова FAST_FORWARD
, и чаще всего их называют "пожарными" курсорами 
 (2) копируют в базу tempdb только те столбцы, которые уникально идентифицируют каждую строку 
 (3) ведут себя так, как если бы при каждом обращении к строке повторно выполнялся оператор SELECT
 
Упражнение 4:
Номер 1
Синтаксис оператора DECLARE CURSOR
имеет вид:
Ответ:
 (1)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
FOR select_statement
{ FOR UPDATE [ OF column_name [ ,...n ] ] }
 
 (2)
DECLARE cursor_name CURSOR
{ LOCAL | GLOBAL }
{ FORWARD_ONLY | SCROLL }
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
 
 (3)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
 
Номер 2
Синтаксис оператора DECLARE CURSOR
имеет вид:
Ответ:
 (1)
DECLARE cursor_name CURSOR
{ LOCAL | GLOBAL }
{ FORWARD_ONLY | SCROLL }
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
 
 (2)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
 
 (3)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
FOR select_statement
{ FOR UPDATE [ OF column_name [ ,...n ] ] }
 
Номер 3
Синтаксис оператора DECLARE CURSOR
имеет вид:
Ответ:
 (1)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
 
 (2)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
FOR select_statement
{ FOR UPDATE [ OF column_name [ ,...n ] ] }
 
 (3)
DECLARE cursor_name CURSOR
{ LOCAL | GLOBAL }
{ FORWARD_ONLY | SCROLL }
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
 
Упражнение 5:
Номер 1
DECLARE @CustId INT
DECLARE @CustName VARCHAR( 30 )
DECLARE CustCursor CURSOR FOR
SELECT CustId, Name
FROM Customer
ORDER BY CustId
FOR READ ONLY
OPEN CustCursor
WHILE (0 = 0) BEGIN
FETCH NEXT
FROM CustCursor
INTO @CustId, @CustName
IF ( @@FETCH_STATUS <> 0 ) BREAK
PRINT CAST ( @CustId AS VARCHAR(IO) ) + ' ' + @CustName
END
CLOSE CustCursor
DEALLOCATE CustCursor
Данный сценарий выполняет действия:
Ответ:
 (1) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
СОЗДАЕТСЯ результирующий набор строк инструкции SELECT
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в НОВЫЙ НАБОР СТРОК. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в ТОТ ЖЕ НАБОР СТРОК до тех пор, пока таблица не будет прочитана до конца 
 (2) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
СОЗДАЕТСЯ результирующий набор строк инструкции SELECT
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO
. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (3) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
результирующий набор строк инструкции SELECT
НЕ создается. Он создается при выполнении инструкции OPEN
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO
. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
Номер 2
DECLARE @CustId INT
DECLARE @CustName VARCHAR( 30 )
DECLARE CustCursor CURSOR FOR
SELECT CustId, Name
FROM Customer
ORDER BY CustId
FOR READ ONLY
OPEN CustCursor
WHILE (0 = 0) BEGIN
FETCH NEXT
FROM CustCursor
INTO @CustId, @CustName
IF ( @@FETCH_STATUS <> 0 ) BREAK
PRINT CAST ( @CustId AS VARCHAR(10) ) + ' ' + @CustName
END
CLOSE CustCursor
DEALLOCATE CustCursor
Данный сценарий выполняет действия:
Ответ:
 (1) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
СОЗДАЕТСЯ результирующий набор строк инструкции SELECT
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO
. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (2) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
результирующий набор строк инструкции SELECT
НЕ создается. Он создается при выполнении инструкции OPEN
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO
. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (3) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
СОЗДАЕТСЯ результирующий набор строк инструкции SELECT
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в НОВЫЙ НАБОР СТРОК. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в ТОТ ЖЕ НАБОР СТРОК до тех пор, пока таблица не будет прочитана до конца 
Номер 3
DECLARE @CustId INT
DECLARE @CustName VARCHAR( 30 )
DECLARE CustCursor CURSOR FOR
SELECT CustId, Name
FROM Customer
ORDER BY CustId
FOR READ ONLY
OPEN CustCursor
WHILE (0 = 0) BEGIN
FETCH NEXT
FROM CustCursor
INTO @CustId, @CustName
IF ( @@FETCH_STATUS <> 0 ) BREAK
PRINT CAST ( @CustId AS VARCHAR(IO) ) + ' ' + @CustName
END
CLOSE CustCursor
DEALLOCATE CustCursor
Данный сценарий выполняет действия:
Ответ:
 (1) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
результирующий набор строк инструкции SELECT
НЕ создается. Он создается при выполнении инструкции OPEN
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO
. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (2) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
СОЗДАЕТСЯ результирующий набор строк инструкции SELECT
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в НОВЫЙ НАБОР СТРОК. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в ТОТ ЖЕ НАБОР СТРОК до тех пор, пока таблица не будет прочитана до конца 
 (3) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR
СОЗДАЕТСЯ результирующий набор строк инструкции SELECT
. При первом выполнении инструкции FETCH NEXT
считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO
. Далее, выполняясь в цикле, инструкция FETCH NEXT
считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
Упражнение 6:
Номер 1
Команда FETCH
:
Ответ:
 (1) объединяет строки курсора в новую таблицу или представление 
 (2) изменяет исходное значение во множестве модифицируемого курсора 
 (3) извлекает указанную строку из множества строк курсора 
Номер 2
Позиционное обновление представляет собой:
Ответ:
 (1) обновление курсора средствами Enterprise Manager 
 (2) изменение исходных значений во множестве модифицируемого курсора 
 (3) извлечение указанной строки из множества строк курсора 
Номер 3
Функция CURSOR_STATUS
:
Ответ:
 (1) позволяет определить статус курсора 
 (2) определяет назначение и функции курсора 
 (3) предназначена для позиционного обновления курсора 
Упражнение 7:
Номер 1
Синтаксис команды позиционного обновления имеет вид:
Ответ:
 (1)
UPDATE таблица_или_представление
( SET список_для_модификации )
 
 (2)
UPDATE таблица_или_представление
[ SET список_для_модификации ]
[ WHERE CURRENT OF курсор_или_переменная ]
 
 (3)
UPDATE таблица_или_представление
SET список_для_модификации
WHERE CURRENT OF курсор_или_переменная
 
Номер 2
Синтаксис функции CURSOR_STATUS
имеет вид:
Ответ:
 (1)
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
{ 'variable' , 'cursor_variable' }
)
 
 (2)
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
| { 'global' , 'cursor_name' }
| { 'variable' , 'cursor_variable' }
)
 
 (3)
CURSOR_STATUS
[
{ 'local' , 'cursor_name' }
]
 
Номер 3
Синтаксис оператора FETCH
имеет вид:
Ответ:
 (1)
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
 
 (2)
FETCH
{ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
}
[ { [ GLOBAL ] cursor_name } | @cursor_variable_name ]
 
 (3)
FETCH
[ NEXT | PRIOR ]
FROM
]
[ INTO @variable_name [ ,...n ] ]