Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_Otveti_po_liksiam.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
458.04 Кб
Скачать

Рекомендации по созданию и использованию рекурсивных отв

  • Определение рекурсивного ОТВ должно содержать по крайней мере два запроса: первый запрос называется закрепленным элементом, а второй запрос называется рекурсивным элементом. Могут быть определены несколько закрепленных элементов и несколько рекурсивных элементов, однако все закрепленные элементы должны быть поставлены перед первым рекурсивным элементом. Все запросы в определении ОТВ являются закрепленными элементами, если только они не ссылаются на само ОТВ.

  • Закрепленные элементы должны объединяться одним из следующих операторов работы с наборами: UNION ALL, UNION, INTERSECT или EXCEPT. UNION ALL является единственным оператором, который может находиться между последним закрепленным элементом и первым рекурсивным элементом, а также при объединении нескольких рекурсивных элементов.

  • Типы и количество столбцов закрепленных и рекурсивных элементов должны совпадать.

  • Предложение FROM рекурсивного элемента должно ссылаться на ОТВ только один раз.

  • Следующие элементы недопустимы в определении рекурсивного элемента:

    1. SELECT DISTINCT

    2. GROUP BY

    3. HAVING

    4. Скалярный агрегат

    5. TOP

    6. LEFT, RIGHT, OUTER JOIN (INNER JOIN допускается)

    7. Вложенные запросы

    8. Подсказка, применимая к рекурсивной ссылке на ОТВ в определении ОТВ

  • Все столбцы, возвращаемые рекурсивным ОТВ, могут содержать значения NULL, независимо от того, могут ли иметь значения NULL столбцы, возвращаемые участвующими инструкциями SELECT.

  • Неправильно составленное рекурсивное ОТВ может привести к бесконечному циклу. Для предотвращения бесконечного цикла можно ограничить количество уровней рекурсии, допустимых для определенной инструкции, с помощью подсказки MAXRECURSION и значения в диапазоне от 0 до 32 767 в предложении OPTION инструкции INSERT, UPDATE, MERGE, DELETE или SELECT. Серверное значение по умолчанию равно 100. Если указано значение 0, ограничения не применяются. В одной инструкции может быть указано только одно значение MAXRECURSION.

  • Представление, содержащее рекурсивное ОТВ, не может использоваться для обновления данных.

  • Курсоры могут определяться на запросах при помощи ОТВ. Для рекурсивных ОТВ допустимы только однонаправленные и статические курсоры (курсоры моментального снимка). Если в рекурсивном ОТВ указан курсор другого типа, тип курсора преобразуется в статический.

  1. Инструкции языка управления потоком Transact-sql Язык управления потоком (Transact-sql)

SQL Server 2012

Ключевые слова языка управления потоком Transact-SQL:

BEGIN...END

RETURN

break

THROW

CONTINUE

TRY...CATCH

GOTO label

WAITFOR

IF...ELSE

WHILE

BEGIN...END (Transact-SQL)

SQL Server 2012

Включает в себя последовательность инструкций языка Transact-SQL, позволяя выполнять группу инструкций Transact-SQL. Ключевые слова BEGIN и END относятся к языку потока управления.

 Соглашения о синтаксисе в Transact-SQL

Синтаксис

BEGIN

     {

    sql_statement | statement_block

     }

END

Аргументы

sql_statementstatement_block }

Любая допустимая инструкция или группа инструкций языка Transact-SQL, определенная с помощью блока инструкций.

BREAK (Transact-SQL)

SQL Server 2012

Выполняет выход из самого внутреннего цикла в инструкции WHILE или из инструкции IF...ELSE в цикле WHILE. Выполняется любая инструкция, находящаяся сразу после ключевого слова END, обозначающего конец цикла. Часто, но не всегда, ключевое слово BREAK встречается после проверки условия инструкции IF.

CONTINUE (Transact-SQL)

SQL Server 2012

Производит перезапуск цикла WHILE. Никакие инструкции после ключевого слова CONTINUE не выполняются. CONTINUE часто, но не всегда, предваряется проверкой IF. Дополнительные сведения см. в разделе WHILE (Transact-SQL) и Язык управления потоком (Transact-SQL).

GOTO (Transact-SQL)

SQL Server 2012

Переводит поток выполнения на метку. Инструкции языка Transact-SQL или инструкции, следующие за инструкцией GOTO, пропускаются, и выполнение продолжается с метки. Инструкция GOTO и метки могут быть включены в процедуру, пакет или блок инструкций. Инструкции GOTO могут быть вложенными.

 Синтаксические обозначения в Transact-SQL

Синтаксис

Define the label: 

label:  

Alter the execution:

GOTO label

Аргументы

label

Точка, с которой начинается обработка инструкций после перехода на текущую метку с помощью инструкции GOTO. Метки должны соответствовать правилам для идентификаторов. Метка может применяться без инструкции GOTO как метод комментирования.

IF...ELSE (Transact-SQL)

SQL Server 2012

Задает условия для выполнения инструкции Transact-SQL. Инструкция языка Transact-SQL, следующая за ключевым словом IF и его условием выполняется только в том случае, если логическое выражение возвращает TRUE. Необязательное ключевое слово ELSE представляет другую инструкцию языка Transact-SQL, которая выполняется, если условие IF не удовлетворяется и логическое выражение возвращает FALSE.

 Синтаксические обозначения Transact-SQL

Синтаксис

IF Boolean_expression

     { sql_statement | statement_block }

[ ELSE

     { sql_statement | statement_block } ]

Аргументы

Boolean_expression

Выражение, возвращающее значение TRUE или FALSE. Если логическое выражение содержит инструкцию SELECT, инструкция SELECT должна быть заключена в скобки.

sql_statementstatement_block }

Любая инструкция или группа инструкций языка Transact-SQL, указанная с помощью блока инструкций. Без использования блока инструкций условия IF и ELSE могут повлиять на выполнение только одной инструкции языка Transact-SQL.

Для определения блока инструкций используйте ключевые слова потока управления BEGIN и END.

RETURN (Transact-SQL)

SQL Server 2012

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

 Синтаксические обозначения в Transact-SQL

Синтаксис

RETURN [ integer_expression ]

Аргументы

integer_expression

Возвращаемое целочисленное значение. Хранимые процедуры могут возвращать целочисленное значение вызывающей их процедуре или приложению.

THROW (Transact-SQL)

SQL Server 2012

Вызывает исключение и передает выполнение блоку CATCH конструкции TRY…CATCH в SQL Server 2012.

 Синтаксические обозначения Transact-SQL

Синтаксис

THROW [ { error_number | @local_variable },

        { message | @local_variable },

        { state | @local_variable } ]

[ ; ]

Аргументы

error_number

Константа или переменная, представляющая исключение. Аргумент error_number имеет тип int, должен иметь значение не меньше 50000 и не больше 2147483647.

message

Строка или переменная, описывающая исключение. Аргумент message имеет тип nvarchar(2048).

state

Константа или переменная со значением в диапазоне от 0 до 255, указывающие состояние, которое должно быть связано с сообщением. Аргумент state имеет тип tinyint.

TRY...CATCH (Transact-SQL)

SQL Server 2012

Реализация обработчика ошибок на языке Transact-SQL похожа на обработку исключений в языках Microsoft Visual C# и Microsoft Visual C++. Группа инструкций на языке Transact-SQL может быть заключена в блок TRY. Если ошибка возникает в блоке TRY, управление передается следующей группе инструкций, заключенных в блок CATCH.

 Синтаксические обозначения в Transact-SQL

Синтаксис

BEGIN TRY

     { sql_statement | statement_block }

END TRY

BEGIN CATCH

     [ { sql_statement | statement_block } ]

END CATCH

[ ; ]

Аргументы

sql_statement

Любая из инструкций языка Transact-SQL.

statement_block

Любая группа инструкций языка Transact-SQL в пакете или заключенная в блок BEGIN…END.

WAITFOR (Transact-SQL)

SQL Server 2012

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

 Синтаксические обозначения в Transact-SQL

Синтаксис

WAITFOR

{

DELAY 'time_to_pass'

| TIME 'time_to_execute'

| [ ( receive_statement ) | ( get_conversation_group_statement ) ]

[ , TIMEOUT timeout ]

}

Аргументы

DELAY

Заданный период времени (не более 24 часов), который должен пройти до выполнения пакета, хранимой процедуры или продолжения транзакции.

'time_to_pass'

Период времени ожидания. Аргумент time_to_pass может быть задан в одном из допустимых форматов для данных типа datetime или в виде локальной переменной. Даты не могут быть указаны, поэтому часть значения datetime, относящаяся к дате, не разрешена.

TIME

Заданное время выполнения пакета, хранимой процедуры или транзакции.

'time_to_execute'

Время, в которое инструкция WAITFOR завершает работу. Аргумент time_to_execute может быть задан в одном из допустимых форматов для данных типаdatetime или в виде локальной переменной. Даты не могут быть указаны, поэтому часть значения datetime, относящаяся к дате, не разрешена.

receive_statement

Допустимая инструкция RECEIVE.

 Важно!

Инструкция WAITFOR с аргументом receive_statement применима только к сообщениям компонента Компонент Service Broker. Дополнительные сведения см. в разделе RECEIVE (Transact-SQL).

get_conversation_group_statement

Допустимая инструкция GET CONVERSATION GROUP.

 Важно!

Инструкция WAITFOR с аргументом get_conversation_group_statement применима только к сообщениям

компонента Компонент Service Broker..

TIMEOUT timeout

Указывает период времени ожидания очередного сообщения (в миллисекундах).

 Важно!

Инструкция WAITFOR с аргументом TIMEOUT применима только к сообщениям компонента

Компонент Service Broker. 

WHILE (Transact-SQL)

SQL Server 2012

Ставит условие повторного выполнения SQL-инструкции или блока инструкций. Эти инструкции вызываются в цикле, пока указанное условие истинно. Вызовами инструкций в цикле WHILE можно контролировать из цикла с помощью ключевых слов BREAK и CONTINUE.

 Соглашение о синтаксисе в Transact-SQL

Синтаксис

WHILE Boolean_expression

     { sql_statement | statement_block | BREAK | CONTINUE }

Аргументы

Boolean_expression

Выражение, которое возвращает либо TRUE, либо FALSE. Если логическое выражение содержит инструкцию SELECT, то инструкция SELECT должна быть заключена в скобки.

{sql_statement | statement_block}

Любая инструкция или группа инструкций Transact-SQL, определенная в виде блока инструкций. Для определения блока инструкций необходимо использовать ключевые слова потока управления BEGIN и END.

BREAK

Приводит к выходу из ближайшего цикла WHILE. Вызываются инструкции, следующие за ключевым словом END, обозначающим конец цикла.

CONTINUE

Выполняет цикл WHILE для перезагрузки, не учитывая все инструкции, следующие после ключевого слова CONTINUE.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]