Команды sql, функциональное оглавление


Содержание

Глава 2. SQL. ОБЗОР.

Эта глава знакомит вас со структурой языка SQL, а также с некоторыми общими понятиями, такими как типы данных, которые поля могут содержать, и некоторыми неоднозначностями, которые существуют в SQL. Она должна обеспечить связь с более конкретной информацией в последующих главах. Вы не должны запоминать каждую подробность, упомянутую в этой главе.

Здесь дан лишь краткий обзор; многие подробности даны, чтобы впоследствии обращаться к ним по мере овладения языком. Мы поместили всё это в начало книги, чтобы ориентировать вас на мир SQL без упрощенного подхода к его проблемам и, в тоже время, дать вам повторяющиеся в дальнейшем места для ссылки на них, когда у вас появятся вопросы. Этот материал может стать более понятным, когда мы перейдём к описанию конкретных команд SQL в Главе 3.

КАК РАБОТАЕТ SQL?

SQL это язык, ориентированный специально на реляционные базы данных (РБД). Он выполняет большую работу, которую вы должны были бы делать, если бы использовали универсальный язык программирования, например C. Чтобы сформировать РБД на C, вам необходимо было бы начать с нуля. Вы должны были бы определить объект, называемый таблицей, которая могла бы увеличиваться, чтобы иметь любое число строк, а затем создавать постепенно процедуры для вставки и извлечения значений.
Если бы вы захотели найти некоторые конкретные строки, вам необходимо было бы выполнить по шагам процедуру, подобную следующей:

  1. Рассмотреть строку таблицы.
  2. Выполнить проверку: является ли эта строка одной из строк, которая вам нужна.
  3. Если это так, сохранить её где-нибудь, пока вся таблица не будет проверена.
  4. Проверить, имеются ли другие строки в таблице.
  5. Если имеются, возвратиться на шаг 1.
  6. Если строк больше нет, вывести все значения, сохранённые в шаге 3.

(Конечно, это не фактический набор C-команд, а только логика шагов, которые должны были бы быть включены в реальную программу.) SQL сделает всё это за вас. Команды в SQL могут работать со всеми группами таблиц как с единым объектом и могут обрабатывать любое количество информации, извлечённой или полученной из них в виде единого модуля.

ЧТО ДЕЛАЕТ ANSI?

Как мы уже сказали во Введении, стандарт SQL определяется с помощью кода ANSI (Американский Национальный Институт Стандартов). SQL не изобретался ANSI. Это, по существу, изобретение IBM. Но другие компании подхватили SQL сразу же. По крайней мере одна компания (Oracle) отвоевала у IBM право на рыночную продажу SQL-продуктов.
После того как появился ряд конкурирующих программ SQL на рынке, ANSI определил стандарт, к которому они должны быть приведены. (Определение таких стандартов и является функцией ANSI). Однако после этого появились некоторые проблемы. Возникли они, в результате стандартизации ANSI, в виде некоторых ограничений. Так как не всегда ANSI определяет то, что является наиболее полезным, то программы пытаются соответствовать стандарту ANSI, не позволяя ему ограничивать их слишком сильно. Это, в свою очередь, ведет к случайным несогласованностям. Программы Баз Данных обычно придают ANSI SQL дополнительные особенности и часто ослабляют многие ограничения. Поэтому распространённые разновидности ANSI будут также рассмотрены. Хотя мы, очевидно, не сможем рассмотреть каждое исключение или разновидность, удачные идеи имеют тенденцию к внедрению и использованию в различных программах, даже когда они не определены стандартом ANSI. ANSI это вид минимального стандарта, и вы можете делать больше, чем он позволяет, хотя и должны выполнять его указания при выполнении задач, которые он определяет.

ИНТЕРАКТИВНЫЙ И ВЛОЖЕННЫЙ SQL

Имеются два SQL: Интерактивный и Вложенный. Большей частью обе формы работают одинаково, но используются различно. Интерактивный SQL используется для функционирования непосредственно в базе данных, чтобы производить вывод для использования его заказчиком. В этом SQL — когда вы введёте команду, она сейчас же выполнится, и вы сможете сразу увидеть вывод (если он вообще получится).

Вложенный SQL состоит из команд SQL, помещённых внутри программ, которые обычно написаны на другом языке (типа КОБОЛа или ПАСКАЛя). Это делает такие программы более мощными и эффективным.

Однако, допуская эти языки, приходится иметь дело со структурой SQL и стилем управления данных, который требует некоторых расширений интерактивного SQL. Передача SQL-команд во вложенный SQL является пропускаемой («passed off») для переменных или параметров, используемых программой, в которую они были вложены.

В этой книге мы будем представлять SQL в интерактивной форме. Это даст нам возможность обсуждать команды и их действия, не заботясь о том, как они связаны с помощью интерфейса с другими языками. Интерактивный SQL это форма, наиболее полезная для непрограммистов. Всё, что вы узнаете относительно интерактивного SQL, в основном применимо и к вложенной форме. Изменения, необходимые для использования вложенной формы, будут рассмотрены в последней главе этой книги.

ПОДРАЗДЕЛЫ SQL

И в интерактивной, и во вложенной формах SQL имеются многочисленные части, или подразделы. Так как вы, вероятно, столкнетесь с этой терминологией при чтении SQL, мы дадим некоторые пояснения. К сожалению, эти термины не используются повсеместно во всех реализациях. Они указаны ANSI и полезны на концептуальном уровне, но большинство SQL-программ практически не обрабатывают их отдельно, так что они, по существу, становятся функциональными категориями команд SQL.

DDL (Язык Определения Данных) — так называемый Язык Описания Схемы в ANSI — состоит из команд, которые создают объекты (таблицы, индексы, просмотры и так далее) в базе данных.

DML (Язык Манипулирования Данными) это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени.

DCD (Язык Управления Данными) состоит из средств, которые определяют, разрешить ли пользователю выполнять определённые действия, или нет. Они являются составными частями DDL в ANSI.

Не забывайте эти названия. Это не различные языки, а разделы команд SQL, сгруппированные по их функциям.

РАЗЛИЧНЫЕ ТИПЫ ДАННЫХ

Не все типы значений, которые могут находиться в полях таблицы, логически одинаковы. Наиболее очевидное различие — между числами и текстом. Вы не можете помещать числа в алфавитном порядке или вычитать одно имя из другого.
Так как системы с РБД базируются на связях между фрагментами информации, различные типы данных должны отличаться друга от друга так, чтобы соответствующие процессы и сравнения могли быть в них выполнены. В SQL это делается с помощью назначения каждому полю типа данных, указывающего тип значения, которое это поле может содержать. Все значения в данном поле должны иметь одинаковый тип. В таблице Заказчиков, например, cname и city содержат строки текста для оценки, а snum и cnum это числа. По этой причине вы не можете ввести значение Highest (Наивысший) или значение None (Никакой) в поле rating, которое имеет числовой тип данных. Это ограничение удачно, так как оно налагает некоторую структурность на ваши данные. Вы часто будете сравнивать некоторые или все значения в данном поле, поэтому вы можете выполнять действие только на определенных строках, а не на всех. Вы не могли бы сделать этого, если бы значения полей имели смешанный тип данных.

К сожалению, определение этих типов данных является основной областью, в которой большинство коммерческих программ БД и официальный стандарт SQL не всегда совпадают. ANSI SQL-стандарт распознаёт только text и number, в то время как большинство коммерческих программ используют другие специальные типы. Такие как DATA (ДАТА) и TIME (ВРЕМЯ) — фактически, почти стандартные типы (хотя точный формат их меняется). Некоторые пакеты также поддерживают такие типы как, например, MONEY (ДЕНЬГИ) и BINARY (ДВОИЧНЫЙ). (MONEY это специальная «валютная» система исчисления, используемая компьютерами.)

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

ANSI определяет несколько числовых типов, различия между которыми довольно тонки, и иногда их путают. Разрешённые ANSI-типы данных перечислены в Приложении B. Сложность числовых типов ANSI можно, по крайней мере частично, объяснить усилием сделать вложенный SQL совместимым с рядом других языков. Два типа чисел ANSI — INTEGER (ЦЕЛОЕ ЧИСЛО) и DECIMAL (ДЕСЯТЕРИЧНОЕ ЧИСЛО) (которые можно сокращать как INT и DEC, соответственно), будут адекватны для наших целей, так же как и для целей большинства практических деловых прикладных программ. Естественно, что тип ЦЕЛОЕ можно представить как ДЕСЯТЕРИЧНОЕ ЧИСЛО, которое не содержит никаких цифр справа от десятичной точки.

Тип для текста — CHAR (или СИМВОЛ), относящийся к строке текста. Поле типа CHAR имеет длину, определяемую максимальным числом символов, которые могут быть введены в это поле. Большая часть реализаций также имеют нестандартный тип, называемый VARCHAR (ПЕРЕМЕННОЕ ЧИСЛО СИМВОЛОВ), который является текстовой строкой и может иметь любую длину до определённого реализацией максимума (обычно 254 символа). Значения CHARACTER и VARCHAR включаются в одиночные кавычки как ‘текст’. Различие между CHAR и VARCHAR в том, что CHAR должен резервировать достаточное количество памяти для максимальной длины строки, а VARCHAR распределяет память по мере необходимости.
Символьные типы состоят из всех печатных символов, включая числа. Однако число 1 это не то же, что символ «1». Символ «1» — только печатный фрагмент текста, не определяемый системой как числовое значение 1. Например 1 + 1 = 2, но «1» + «1» не равно «2». Символьные значения сохраняются в компьютере как двоичные значения, но показываются пользователю как печатный текст.

Преобразование выполняется по формату, определяемому системой, которую вы используете. Этот формат преобразования будет одним из двух стандартных типов (возможно, с расширениями), используемых в компьютерных системах: ASCII-код (используемый во всех персональных и малых компьютерах) и EBCDIC-код (Расширенном Двоично-Десятеричном Код Обмена Информации) (используемый в больших компьютерах). Определенные операции, такие как упорядочивание в алфавитном порядке значений поля, будет изменяться вместе с форматом. Применение этих двух форматов будет обсуждаться в Главе 4.

Мы должны следить за рынком, а не за ANSI, в использовании типа DATE (ДАТА). (В системе, которая не распознает тип ДАТА, вы, конечно, можете объявить дату как символьное или числовое поле, но это сделает большинство операций более трудоёмкими.)

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

SQL. НЕСОГЛАСОВАННОСТИ.

Вы можете понять из предшествующего обсуждения, что имеются самостоятельные отдельные несоответствия между продуктами мира SQL. SQL появился из коммерческого мира БД как инструмент и был позже превращён в стандарт ANSI. К сожалению, ANSI не всегда определяет наиболее полезное, поэтому программы пытаются соответствовать стандарту ANSI, не позволяя ему ограничивать их слишком сильно. ANSI — вид минимального стандарта — вы можете делать, больше чем он это позволяет, но вы должны быть способны получить те же самые результаты при выполнении той же самой задачи.

ЧТО ТАКОЕ «ПОЛЬЗОВАТЕЛЬ»?

SQL обычно находится в компьютерных системах, которые имеют больше чем одного пользователя и, следовательно, должен различать их (ваше семейство PC может иметь любое число пользователей, но оно обычно не имеет способов, чтобы отличать одного пользователя от другого).
Обычно в такой системе каждый пользователь имеет некий вид кода проверки прав, который идентифицирует его или её (терминология изменяется). В начале сеанса с компьютером пользователь входит в систему (регистрируется), сообщая компьютеру, кто этот пользователь, идентифицируясь с помощью определенного ID (Идентификатора). Любое количество людей, использующих ID доступа, являются отдельными пользователями; и, аналогично, один человек может представлять большое количество пользователей (в разное время), используя различные идентификаторы доступа к SQL. Действия в большинстве сред SQL приведены к специальному Идентификатору доступа, который точно соответствует определённому пользователю. Таблица или другой объект принадлежит пользователю, который имеет над ним полную власть. Пользователь может или может не иметь привилегии на выполнение действия над объектом. Для наших целей мы договоримся, что любой пользователь имеет необходимые привилегии для выполнения любого действия, пока мы не возвратимся специально к обсуждению привилегий в Главе 22. Специальное значение USER (ПОЛЬЗОВАТЕЛЬ) может использоваться как аргумент в команде. Оно указывает на доступный Идентификатор пользователя, выдавшего команду.

УСЛОВНЫЕ ОБОЗНАЧЕНИЯ И ТЕРМИНОЛОГИЯ

Ключевые слова это слова, которые имеют специальное значение в SQL. Они могут быть командами, но не текстом и не именами объектов. Мы будем выделять ключевые слова, печатая их ЗАГЛАВНЫМИ БУКВАМИ. Вы должны быть внимательны, чтобы не путать ключевые слова с терминами.

В SQL есть определённые специальные термины, которые используются для его описания. Среди них такие слова как «запрос», «предложение» и «предикат», которые являются важнейшими в описании и понимании языка, но не означают что-нибудь самостоятельное для SQL.

Команды или предложения являются инструкциями, с помощью которых вы обращаетесь к БД SQL.

Команды состоят из одной или более отдельных логических частей, называемых предложениями.

Предложения начинаются ключевым словом и состоят из ключевых слов и аргументов. Например, предложения, с которыми вы можете сталкиваться, это «FROM Salespeope» и «WHERE city = «London»». Аргументы завершают или изменяют значение предложения. В примерах выше, Salespeople — аргумент, а FROM — ключевое слово предложения FROM. Аналогично «city = «London»» — аргумент предложения WHERE.

Объекты это структуры БД, которым даны имена и которые сохраняются в памяти. Сюда относятся базовые таблицы, представления и индексы.

Чтобы показать вам, как формируются команды, мы будем делать это на примерах. Имеется, однако, более формальный метод описания команд, использующий стандартизированные условные обозначения. Мы будем использовать его в последующих главах для удобства, чтобы понимать эти условные обозначения в случае, если вы столкнетесь с ними в других SQL-документах.
Квадратные скобки ( [ ] ) будут указывать части, которые могут не использоваться, а многоточия ( . ) указывают, что всё, предшествующее им, может повторяться любое число раз. Слова в угловых скобках ( ) — специальные термины, которые объясняют, что они собой представляют. Мы значительно упростили стандартную терминологию SQL, но без ухудшения его понимания.

РЕЗЮМЕ

Мы кратко рассмотрели в этой главе основы. Но нашим намерением и было — бегло рассмотреть основы SQL так, чтобы вы смогли охватить весь объём информации. Когда мы возвратимся к основам в следующей главе, некоторые вещи будут конкретизированы.

Теперь вы знаете кое-что относительно SQL: какова его структура, как он используется, как он представляет данные и как они определяются (и некоторые несогласованности, появляющиеся при этом), некоторые условные обозначения и термины, используемые для их описания. Всё это — слишком большой объём информации для одной главы; мы не ожидаем, что вы запомнили все эти подробности, но вы сможете вернуться к ним позже, если понадобится.

Главе 3 мы будем работать, показывая конкретно, как формируются команды и что они делают. Мы представим вам команду SQL, используемую для извлечения информации из таблиц, которая является наиболее часто используемой командой SQL. К концу главы вы будете способны извлекать конкретную информацию из вашей БД с высокой степенью точности.

Создание определяемых пользователем функций (компонент Database Engine) Create User-defined Functions (Database Engine)

ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

В этом разделе описывается создание определяемой пользователем функции в SQL Server SQL Server с помощью Transact-SQL Transact-SQL . This topic describes how to create a user-defined function (UDF) in SQL Server SQL Server by using Transact-SQL Transact-SQL .

Перед началом Before You Begin

Ограничения Limitations and restrictions

Определяемые пользователем функции не могут выполнять действия, изменяющие состояние базы данных. User-defined functions cannot be used to perform actions that modify the database state.

Определяемые пользователем функции не могут содержать предложение OUTPUT INTO , целью которого является таблица. User-defined functions cannot contain an OUTPUT INTO clause that has a table as its target.

Определяемые пользователем функции не могут возвращать несколько результирующих наборов. User-defined functions can not return multiple result sets. Используйте хранимую процедуру, если нужно возвращать несколько результирующих наборов. Use a stored procedure if you need to return multiple result sets.

Обработка ошибок в функциях, определяемых пользователем, ограниченна. Error handling is restricted in a user-defined function. UDF не поддерживает тип TRY. CATCH , @ERROR и RAISERROR . A UDF does not support TRY. CATCH , @ERROR or RAISERROR .

Определяемые пользователем функции не могут вызывать хранимую процедуру, но могут вызывать расширенную хранимую процедуру. User-defined functions cannot call a stored procedure, but can call an extended stored procedure.

Определяемые пользователем функции не могут использовать динамический SQL и временные таблицы. User-defined functions cannot make use of dynamic SQL or temp tables. Табличные переменные разрешены к использованию. Table variables are allowed.

Инструкцию SET нельзя использовать в определяемых пользователем функциях. SET statements are not allowed in a user-defined function.

Пустое предложение FOR XML запрещено. The FOR XML clause is not allowed.

Определяемые пользователем функции могут быть вложенными, то есть из одной функции может быть вызвана другая. User-defined functions can be nested; that is, one user-defined function can call another. Уровень вложенности увеличивается на единицу каждый раз, когда начинается выполнение вызванной функции и уменьшается на единицу, когда ее выполнение завершается. The nesting level is incremented when the called function starts execution, and decremented when the called function finishes execution. Вложенность определяемых пользователем функций не может превышать 32 уровней. User-defined functions can be nested up to 32 levels. Превышение максимального уровня вложенности приводит к ошибке выполнения для всей цепочки вызываемых функций. Exceeding the maximum levels of nesting causes the whole calling function chain to fail. Каждый вызов управляемого кода из определяемой пользователем функции Transact-SQL считается одним уровнем вложенности из 32 возможных. Any reference to managed code from a Transact-SQL user-defined function counts as one level against the 32-level nesting limit. Методы, вызываемые из управляемого кода, под это ограничение не подпадают. Methods invoked from within managed code do not count against this limit.

Илон Маск рекомендует:  Implementation - Ключевое слово Delphi

Следующие инструкции компонента Service Broker не могут быть включены в определение пользовательской функции Transact-SQL Transact-SQL : The following Service Broker statements cannot be included in the definition of a Transact-SQL Transact-SQL user-defined function:

BEGIN DIALOG CONVERSATION

GET CONVERSATION GROUP

Permissions Permissions

Требуется разрешение CREATE FUNCTION на базу данных и разрешение ALTER для схемы, в которой создается функция. Requires CREATE FUNCTION permission in the database and ALTER permission on the schema in which the function is being created. Если в функции указан определяемый пользователем тип, требуется разрешение EXECUTE на этот тип. If the function specifies a user-defined type, requires EXECUTE permission on the type.

Скалярные функции Scalar Functions

В следующем примере создается скалярная функция (скалярная UDF) из нескольких инструкций в базе данных AdventureWorks2012 AdventureWorks2012 . The following example creates a multi-statement scalar function (scalar UDF) in the AdventureWorks2012 AdventureWorks2012 database. Функция имеет один входной параметр ProductID и возвращает одно значение — количество указанного товара на складе. The function takes one input value, a ProductID , and returns a single data value, the aggregated quantity of the specified product in inventory.

В следующем примере функция ufnGetInventoryStock используется для получения сведений о количестве товаров с идентификаторами ProductModelID от 75 до 80. The following example uses the ufnGetInventoryStock function to return the current inventory quantity for products that have a ProductModelID between 75 and 80.

Дополнительные сведения см. в разделе CREATE FUNCTION (Transact-SQL). For more information and examples of scalar functions, see CREATE FUNCTION (Transact-SQL).

Функции с табличными значениями Table-Valued Functions

Результатом следующего примера является встроенная функция, возвращающая табличное значение (TVF) , в базе данных AdventureWorks2012 AdventureWorks2012 . The following example creates an inline table-valued function (TVF) in the AdventureWorks2012 AdventureWorks2012 database. Функция имеет один входной параметр — идентификатор клиента (магазина) — и возвращает столбцы ProductID , Name и столбец YTD Total со сведениями о продажах продукта за текущий год. The function takes one input parameter, a customer (store) ID, and returns the columns ProductID , Name , and the aggregate of year-to-date sales as YTD Total for each product sold to the store.

В следующем примере функция вызывается с идентификатором 602. The following example invokes the function and specifies customer ID 602.

Результатом следующего примера является многооператорная встроенная функция, возвращающая табличное значение (MSTVF) , в базе данных AdventureWorks2012 AdventureWorks2012 . The following example creates a multi-statement table-valued function (MSTVF) in the AdventureWorks2012 AdventureWorks2012 database. Функция имеет один входной параметр EmployeeID и возвращает список всех сотрудников, которые напрямую или косвенно отчитываются перед заданным сотрудником. The function takes a single input parameter, an EmployeeID and returns a list of all the employees who report to the specified employee directly or indirectly. Затем функция вызывается с указанием идентификатора сотрудника 109. The function is then invoked specifying employee ID 109.

В следующем примере функция вызывается с идентификатором сотрудника 1. The following example invokes the function and specifies employee ID 1.

Дополнительные сведения и примеры встроенных функций с табличными значениями (встроенные TVF) или многооператорных функций с табличными значениями (MSTVF) см. в разделе CREATE FUNCTION (Transact-SQL). For more information and examples of inline table-valued functions (inline TVFs) and multi-statement table-valued functions (MSTVFs), see CREATE FUNCTION (Transact-SQL).

Рекомендации Best Practices

Если определяемая пользователем функция (UDF) создана без применения предложения SCHEMABINDING , то изменения базовых объектов могут повлиять на определение функции и привести к непредвиденным результатам при вызове функции. If a user-defined function (UDF) is not created with the SCHEMABINDING clause, changes that are made to underlying objects can affect the definition of the function and produce unexpected results when it is invoked. Рекомендуется реализовать один из следующих методов, чтобы обеспечить, что функция не устареет из-за изменения ее базовых объектов. We recommend that you implement one of the following methods to ensure that the function does not become outdated because of changes to its underlying objects:

Укажите при создании функции UDF предложение WITH SCHEMABINDING . Specify the WITH SCHEMABINDING clause when you are creating the UDF. Это обеспечит невозможность изменения объектов, на которые ссылается определение функции, если при этом не изменяется сама функция. This ensures that the objects referenced in the function definition cannot be modified unless the function is also modified.

Выполняйте хранимую процедуру sp_refreshsqlmodule после изменения любого объекта, указанного в определении функции UDF. Execute the sp_refreshsqlmodule stored procedure after modifying any object that is specified in the definition of the UDF.

Если вы создаете определяемую пользователем функцию, не имеющую доступа к данным, укажите параметр SCHEMABINDING . If creating a UDF that does not access data, specify the SCHEMABINDING option. Это не позволит оптимизатору запросов создавать ненужные операторы очередей для планов запроса, содержащих такие определяемые пользователем функции. This will prevent the query optimizer from generating unnecessary spool operators for query plans involving these UDFs. Дополнительные сведения об очередях см. в справочнике по логическим и физическим операторам Showplan. For more information on spools, see Showplan Logical and Physical Operators Reference. Дополнительные сведения о создании функций, привязанных к схеме, см. в соответствующем разделе. For more information on creating a schema bound function, see Schema-bound functions.

Присоединение к MSTVF в предложении FROM возможно, но может привести к снижению производительности. Joining to an MSTVF in a FROM clause is possible, but can result in poor performance. SQL Server SQL Server не может использовать все оптимизированные методы для некоторых инструкций, которые можно включить в функцию MSTVF, и в результате план запроса оказывается неоптимальным. is unable to use all the optimized techniques on some statements that can be included in a MSTVF, resulting in a suboptimal query plan. Чтобы получить наилучшую производительность, по возможности задавайте соединения не между функциями, а между базовыми таблицами. To obtain the best possible performance, whenever possible use joins between base tables instead of functions.

Функции MSTVF имеют фиксированное предполагаемое значение кратности 100 начиная с SQL Server 2014 (12.x) SQL Server 2014 (12.x) и 1 в более ранних версиях SQL Server SQL Server . MSTVFs have a fixed cardinality guess of 100 starting with SQL Server 2014 (12.x) SQL Server 2014 (12.x) , and 1 for earlier SQL Server SQL Server versions.
Начиная с SQL Server 2020 (14.x) SQL Server 2020 (14.x) для оптимизации плана выполнения, который использует функции MSTVF, можно использовать выполнение с чередованием, что обеспечивает фактическую кратность вместо приведенной выше эвристики. Starting with SQL Server 2020 (14.x) SQL Server 2020 (14.x) , optimizing an execution plan that uses MSTVFs can leverage interleaved execution, which results in using actual cardinality instead of the above heuristics.
Дополнительные сведения см. в разделе Выполнение с чередованием для функций с табличным значением с несколькими инструкциями. For more information, see Interleaved execution for multi-statement table valued functions.

Параметры ANSI_WARNINGS не годятся для передачи в хранимые процедуры, пользовательские функции и при объявлении и установке переменных в пакетных инструкциях. ANSI_WARNINGS is not honored when you pass parameters in a stored procedure, user-defined function, or when you declare and set variables in a batch statement. Например, если объявить переменную как char(3) , а затем присвоить ей значение длиннее трех символов, данные будут усечены до размера переменной, а инструкция INSERT или UPDATE завершится без ошибок. For example, if a variable is defined as char(3), and then set to a value larger than three characters, the data is truncated to the defined size and the INSERT or UPDATE statement succeeds.

Команды sql, функциональное оглавление

— A BETWEEN B AND C , ����� ����� �� �������� ��� � — ( A >= B AND ��� �������� A NOT BETWEEN B AND C, ����� ����� �� �������� ��� � NOT ( BETWEEN B AND C). ����� ���� �������� � ������� �������������� ������� ( *nonstandard* ).

[NOT] LIKE [ESCAPE
]

BEGIN DECLARE SECTION (������ ������� ����������)

EXEC SQL BEGIN DECLARE SECTION EXEC SQL END DECLARE SECTION

CLOSE CURSOR (������� ������)

EXEC SQL CLOSE CURSOR ;

COMMIT (WORK) (�������� (����������))

CREATE INDEX (������� ������)

CREATE [UNIQUE] INDEX
ON ( );

CREATE SYNONYM (*NONSTANDARD*)
(������� �������) ( *������������* )

CREATE IPUBLICl SYNONYM FOR
. ;

CREATE TABLE (������� �������)

CREATE VIEW (������� ��������)

CREATE VIEW
AS
[WITH CHECK OPTION];

DECLARE CURSOR (�������� ������)

EXEC SQL DECLARE CURSOR FOR

DELETE (�������)

DELETE FROM
< [WHERE ]; >
| WHERE CURRENT OF

EXEC SQL (��������� SQL)

FETCH (�������)

EXEC SQL FETCH
INTO

GRANT (�������� �����)

GRANT ALL [PRIVILEGES]
|