Главная / Базы данных /
Программирование в Microsoft SQL Server 2000 / Тест 30
Программирование в Microsoft SQL Server 2000 - тест 30
Упражнение 1:
Номер 1
SQL Server 2000 поддерживает различные типы пользовательских функций:
Ответ:
 (1) векторные 
 (2) скалярные 
 (3) табличные 
 (4) интегральные 
 (5) разделяемые 
Номер 2
Функция является детерминированной, если:
Ответ:
 (1) она может возвращать различные значения при одном и том же заданном входном значении 
 (2) при одном и том же заданном входном значении она всегда возвращает один и тот же результат 
 (3) при различных входных значениях она всегда возвращает один и тот же результат 
Номер 3
Функция является недетерминированной, если:
Ответ:
 (1) она может возвращать различные значения при одном и том же заданном входном значении 
 (2) при различных входных значениях она всегда возвращает один и тот же результат 
 (3) при одном и том же заданном входном значении она всегда возвращает один и тот же результат 
Упражнение 2:
Номер 1
Скалярные пользовательские функции характеризуются тем, что:
Ответ:
 (1) объединяют множество результатов в одну строку 
 (2) возвращают таблицу и не заменяют хранимые процедуры или представления, но в определенных ситуациях они могут предоставить более широкие возможности, которые трудно реализовать с помощью этих объектов 
 (3) возвращают скалярный (однозначный) результат, такой как строка или число 
Номер 2
Табличные пользовательские функции характеризуются тем, что:
Ответ:
 (1) возвращают скалярный (однозначный) результат, такой как строка или число 
 (2) возвращают таблицу и не заменяют хранимые процедуры или представления, но в определенных ситуациях они могут предоставить более широкие возможности, которые трудно реализовать с помощью этих объектов 
 (3) объединяют множество результатов в одну строку 
Номер 3
Скалярные пользовательские функции отличаются от табличных тем, что:
Ответ:
 (1) скалярные пользовательские функции возвращают скалярный (однозначный) результат, такой как строка или число 
 (2) табличные пользовательские функции возвращают скалярный (однозначный) результат, такой как строка или число 
 (3) скалярные пользовательские функции возвращают таблицу и не заменяют хранимые процедуры или представления, но в определенных ситуациях они могут предоставить более широкие возможности, которые трудно реализовать с помощью этих объектов 
Упражнение 3:
Номер 1
Синтаксис оператора CREATE FUNCTION
имеет вид:
Ответ:
 (1)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
BEGIN
function_body
RETURN scalar_expression
END
 
 (2)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
{ RETURNS scalar_return_data_type }
{ WITH < function_option > [ [,] ...n] }
{ AS }
BEGIN
function_body
RETURN scalar_expression
END
 
 (3)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option > [ [,] ...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
 
Номер 2
Синтаксис оператора CREATE FUNCTION
имеет вид:
Ответ:
 (1)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
BEGIN
function_body
RETURN scalar_expression
END
 
 (2)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option > [ [,] ...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
 
 (3)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
{ RETURNS scalar_return_data_type }
{ WITH < function_option > [ [,] ...n] }
{ AS }
BEGIN
function_body
RETURN scalar_expression
END
 
Номер 3
Синтаксис оператора CREATE FUNCTION
имеет вид:
Ответ:
 (1)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option > [ [,] ...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
 
 (2)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
{ RETURNS scalar_return_data_type }
{ WITH < function_option > [ [,] ...n] }
{ AS }
BEGIN
function_body
RETURN scalar_expression
END
 
 (3)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
BEGIN
function_body
RETURN scalar_expression
END
 
Упражнение 4:
Номер 1
CREATE FUNCTION CustWithDiscount
( @MinDiscount DEC( 5, 3 ) )
RETURNS @CustWithDiscountTable TABLE (
( CustID INT NOT NULL,
CustName CHAR( 30 ) NOT NULL,
CustDisc DEC( 5, 3 ) NULL,
PRIMARY KEY( CustID ) )
BEGIN
INSERT INTO @CustWithDiscountTable
SELECT CustId, Name, CAST( Discount AS VARCHAR( 7 ) )
FROM Customer
WHERE Discount >= @MinDiscount
RETURN
END
Данный сценарий выполняет действия:
Ответ:
 (1) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкция INSERT
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе как значение функции 
 (2) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкция INSERT
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе КАК НАБОР ОДНОСВЯЗАННЫХ ТАБЛИЦ 
 (3) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкции INSERT
, UPDATE и DELETE
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе как значение функции 
Номер 2
CREATE FUNCTION CustWithDiscount
( @MinDiscount DEC( 5, 3 ) )
RETURNS @CustWithDiscountTable TABLE (
( CustID INT NOT NULL,
CustName CHAR( 30 ) NOT NULL,
CustDisc DEC( 5, 3 ) NULL,
PRIMARY KEY( CustID ) )
BEGIN
INSERT INTO @CustWithDiscountTable
SELECT CustId, Name, CAST( Discount AS VARCHAR( 7 ) )
FROM Customer
WHERE Discount >= @MinDiscount
RETURN
END
Данный сценарий выполняет действия:
Ответ:
 (1) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкция INSERT
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе КАК НАБОР ОДНОСВЯЗАННЫХ ТАБЛИЦ 
 (2) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкции INSERT
, UPDATE и DELETE
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе как значение функции 
 (3) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкция INSERT
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе как значение функции 
Номер 3
CREATE FUNCTION CustWithDiscount
( @MinDiscount DEC( 5, 3 ) )
RETURNS @CustWithDiscountTable TABLE (
( CustID INT NOT NULL,
CustName CHAR( 30 ) NOT NULL,
CustDisc DEC( 5, 3 ) NULL,
PRIMARY KEY( CustID ) )
BEGIN
INSERT INTO @CustWithDiscountTable
SELECT CustId, Name, CAST( Discount AS VARCHAR( 7 ) )
FROM Customer
WHERE Discount >= @MinDiscount
RETURN
END
Данный сценарий выполняет действия:
Ответ:
 (1) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкции INSERT
, UPDATE и DELETE
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе как значение функции 
 (2) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкция INSERT
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе как значение функции 
 (3) создается функция CustWithDiscount. В многострочной табличной пользовательской функции предложение RETURNS
определяет локальную переменную специального типа table
. Объявление этой переменной содержит определения столбцов и необязательные определения ограничений первичного ключа, ограничений уникальности и ограничений на значения. В теле функции могут использоваться инструкция INSERT
, модифицирующие данные таблицы, определяемой этой переменой. При выполнении инструкции RETURN
текущее содержимое таблицы возвращается вызывающей программе КАК НАБОР ОДНОСВЯЗАННЫХ ТАБЛИЦ 
Упражнение 5:
Номер 1
Оператор CREATE FUNCTION
поддерживает создание различных типов табличных функций:
Ответ:
 (1) объединяющих 
 (2) дискретных 
 (3) подставляемых 
 (4) многоисполняемых 
 (5) многооператорных 
Номер 2
Синтаксис оператора CREATE FUNCTION
для подставляемой табличной функции имеет вид:
Ответ:
 (1)
CREATE FUNCTION имя_функции (список_параметров)
RETURNS @локальная_табличная_переменная TABLE
(определение_таблицы)
AS
BEGIN
операторы_tsql
RETURN
END
 
 (2)
CREATE FUNCTION имя_функции (список_параметров)
RETURNS таблица
AS
RETURN (оператор_выборки)
 
 (3)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option > [ [,] ...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
 
Номер 3
Синтаксис оператора CREATE FUNCTION
для для многооператорной табличной функции имеет вид:
Ответ:
 (1)
CREATE FUNCTION имя_функции (список_параметров)
RETURNS @локальная_табличная_переменная TABLE
(определение_таблицы)
AS
BEGIN
операторы_tsql
RETURN
END
 
 (2)
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
WITH < function_option > [ [,] ...n]
BEGIN
function_body
RETURN scalar_expression
END
 
 (3)
CREATE FUNCTION имя_функции (список_параметров)
RETURNS таблица
AS
RETURN (оператор_выборки)
 
Упражнение 6:
Номер 1
Синтаксис вызова скалярных функций имеет вид:
Ответ:
 (1)
имя_владельца.имя_функции(список_параметров, список возвращаемых значений)
 
 (2)
имя_функции([список_параметров])
 
 (3)
имя_владельца.имя_функции([список_параметров])
 
Номер 2
Синтаксис для вызова табличных пользовательских функций имеет вид:
Ответ:
 (1)
имя_владельца.имя_функции(список_параметров, список возвращаемых значений)
 
 (2)
имя_функции([список_параметров])
 
 (3)
имя_владельца.имя_функции([список_параметров])
 
Номер 3
Синтаксис оператора EXECUTE
для скалярной функции имеет вид:
Ответ:
 (1)
EXECUTE @возвращаемое_значение = имя_функции(список_параметров)
 
 (2)
EXECUTE @возвращаемое_значение = имя_функции(имя_владельца.имя_функции([список_параметров]))
 
 (3)
EXECUTE @возвращаемое_значение = имя_функции(имя_владельца([список_параметров]))
 
Упражнение 7:
Номер 1
CREATE FUNCTION CustDiscount
( @CustId INT )
RETURNS DEC( 5, 3 )
BEGIN
DECLARE @Discount DEC( 5, 3 )
SET @Discount =
( SELECT Discount
FROM Customer
WHERE CustId = @CustId )
RETURN @Discount
END
Данный сценарий выполняет действия:
Ответ:
 (1) создается функция CustDiscount, определяется имя выходной переменной - DEC( 5, 3 ). Возвращает переменную @Discount, т.е. скидку определенного клиента 
 (2) создается функция CustDiscount, определяется имя и тип выходной переменной - DEC( 5, 3 ). Возвращает переменную @CustId, т.е. Id определенного клиента 
 (3) создается функция CustDiscount, определяется тип выходного параметра - DEC( 5, 3 ). Возвращает переменную @Discount, т.е. скидку определенного клиента 
Номер 2
CREATE FUNCTION CustDiscount
( @CustId INT )
RETURNS DEC( 5, 3 )
BEGIN
DECLARE @Discount DEC( 5, 3 )
SET @Discount =
( SELECT Discount
FROM Customer
WHERE CustId = @CustId )
RETURN @Discount
END
Данный сценарий выполняет действия:
Ответ:
 (1) создается функция CustDiscount, определяется имя выходной переменной - DEC( 5, 3 ). Возвращает переменную @Discount, т.е. скидку определенного клиента 
 (2) создается функция CustDiscount, определяется тип выходного параметра - DEC( 5, 3 ). Возвращает переменную @Discount, т.е. скидку определенного клиента 
 (3) создается функция CustDiscount, определяется имя и тип выходной переменной - DEC( 5, 3 ). Возвращает переменную @CustId, т.е. Id определенного клиента 
Номер 3
CREATE FUNCTION CustDiscount
( @CustId INT )
RETURNS DEC( 5, 3 )
BEGIN
DECLARE @Discount DEC( 5, 3 )
SET @Discount =
( SELECT Discount
FROM Customer
WHERE CustId = @CustId )
RETURN @Discount
END
Данный сценарий выполняет действия:
Ответ:
 (1) создается функция CustDiscount, определяется тип выходного параметра - DEC( 5, 3 ). Возвращает переменную @Discount, т.е. скидку определенного клиента 
 (2) создается функция CustDiscount, определяется имя и тип выходной переменной - DEC( 5, 3 ). Возвращает переменную @CustId, т.е. Id определенного клиента 
 (3) создается функция CustDiscount, определяется имя выходной переменной - DEC( 5, 3 ). Возвращает переменную @Discount, т.е. скидку определенного клиента