If sql transact sql: IF…ELSE (Transact-SQL) — SQL Server
Содержание
IF…ELSE (Transact-SQL) — SQL Server
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
- Чтение занимает 2 мин
-
Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)
Задает условия выполнения для инструкции 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 } ]
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
Boolean_expression
Выражение, возвращающее значение TRUE или FALSE. Если логическое выражение содержит инструкцию SELECT, инструкция SELECT должна быть заключена в скобки.
{ sql_statement| statement_block }
Любая инструкция или группа инструкций Transact-SQL, определенная с помощью блока операторов. Если блок инструкций не используется, условия IF и ELSE могут влиять на выполнение только одной инструкции Transact-SQL.
Для определения блока инструкций используйте ключевые слова потока управления BEGIN и END.
Конструкция IF…ELSE может быть использована в пакетах, хранимых процедурах и нерегламентированных запросах. При использовании в хранимой процедуре эта конструкция часто применяется для проверки существования некоторого параметра.
Проверки IF могут находиться внутри другого IF или следующего ELSE. Ограничение количества вложенных уровней зависит от свободной памяти.
Пример
IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday') SELECT 'Weekend'; ELSE SELECT 'Weekday';
Дополнительные сведения см. в статье ELSE (IF…ELSE) (Transact-SQL).
Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)
В следующем примере используется IF...ELSE
для определения того, какой из двух ответов показать пользователю, на основе веса элемента в таблице DimProduct
.
-- Uses AdventureWorksDW DECLARE @maxWeight FLOAT, @productKey INTEGER SET @maxWeight = 100.00 SET @productKey = 424 IF @maxWeight <= (SELECT Weight from DimProduct WHERE ProductKey = @productKey) SELECT @productKey AS ProductKey, EnglishDescription, Weight, 'This product is too heavy to ship and is only available for pickup.' AS ShippingStatus FROM DimProduct WHERE ProductKey = @productKey ELSE SELECT @productKey AS ProductKey, EnglishDescription, Weight, 'This product is available for shipping or pickup.' AS ShippingStatus FROM DimProduct WHERE ProductKey = @productKey
См. также:
BEGIN…END (Transact-SQL)
Операторы END (BEGIN…END) (Transact-SQL)
SELECT (Transact-SQL)
WHILE (Transact-SQL)
CASE (Transact-SQL)
Язык управления потоком (Transact-SQL)ELSE (ЕСЛИ… ELSE) (Transact-SQL)
ЕСЛИ… ИНАЧЕ (Transact-SQL) — SQL Server
Редактировать
Твиттер
Фейсбук
Электронная почта
- Статья
- 2 минуты на чтение
Применяется к: SQL Server Azure SQL База данных Azure SQL Управляемый экземпляр Azure Synapse Analytics Analytics Platform System (PDW)
Налагает условия на выполнение оператора Transact-SQL. Оператор Transact-SQL, который следует за ключевым словом IF и его условием, выполняется, если условие выполняется: логическое выражение возвращает TRUE. Необязательное ключевое слово ELSE вводит другую инструкцию Transact-SQL, которая выполняется, когда условие IF не выполняется: логическое выражение возвращает FALSE.
Соглашения о синтаксисе Transact-SQL
Синтаксис
IF Boolean_expression { sql_statement | блок_операторов} [ ЕЩЕ { sql_statement | блок_операторов } ]
Примечание
Для просмотра синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий см. документацию по предыдущим версиям.
Аргументы
Boolean_expression
Выражение, которое возвращает ИСТИНА или ЛОЖЬ. Если логическое выражение содержит оператор SELECT, оператор SELECT должен быть заключен в круглые скобки.
{ sql_statement | statement_block }
Любой оператор Transact-SQL или группа операторов, определенная с помощью блока операторов. Если не используется блок инструкций, условие IF или ELSE может повлиять на производительность только одной инструкции Transact-SQL.
Чтобы определить блок операторов, используйте ключевые слова управления потоком BEGIN и END.
Конструкция IF…ELSE может использоваться в пакетах, в хранимых процедурах и в специальных запросах. Когда эта конструкция используется в хранимой процедуре, она часто используется для проверки существования некоторого параметра.
Тесты IF могут быть вложены после другого IF или после ELSE. Ограничение на количество вложенных уровней зависит от доступной памяти.
Пример
IF DATENAME(день недели, GETDATE()) IN (N'Суббота', N'Воскресенье') ВЫБЕРИТЕ «Выходные»; ЕЩЕ ВЫБЕРИТЕ «День недели»;
Дополнительные примеры см. в разделе ELSE (IF…ELSE) (Transact-SQL).
Примеры: Azure Synapse Analytics and Analytics Platform System (PDW)
В следующем примере используется IF...ELSE
, чтобы определить, какой из двух ответов показывать пользователю на основе веса элемента в DimProduct
стол.
-- использует AdventureWorksDW DECLARE @maxWeight FLOAT, @productKey INTEGER НАБОР @maxWeight = 100,00 УСТАНОВИТЕ @productKey = 424 IF @maxWeight <= (SELECT Weight from DimProduct WHERE ProductKey = @productKey) ВЫБЕРИТЕ @productKey AS ProductKey, EnglishDescription, Weight, 'Этот продукт слишком тяжелый для доставки и доступен только для самовывоза'. AS ShippingStatus ОТ DimProduct, ГДЕ ProductKey = @productKey ЕЩЕ ВЫБЕРИТЕ @productKey AS ProductKey, EnglishDescription, Weight, 'Этот продукт доступен для доставки или самовывоза'. AS ShippingStatus ОТ DimProduct, ГДЕ ProductKey = @productKey
См. также
BEGIN...END (Transact-SQL)
END (BEGIN. ..END) (Transact-SQL)
SELECT (Transact-SQL)
WHILE (Transact-SQL)
CASE (Transact-SQL) )
Язык управления потоком (Transact-SQL)
ИНАЧЕ (ЕСЛИ... ИНАЧЕ) (Transact-SQL)
транзакций в SQL Server для начинающих
В этой статье мы поговорим об основных деталях транзакций в SQL Server.
Введение
Транзакция — это логическая рабочая единица, которая выполняет одно или несколько действий в базе данных.
Транзакции могут состоять из одной операции чтения, записи, удаления или обновления или их комбинации. Предполагать
что, когда мы хотим снять деньги в банкомате, приложение банкомата выполнит эту операцию в три этапа.
В качестве первого шага приложение проверит баланс счета, а затем спишет деньги с
учетная запись источника. Наряду с этими двумя процессами он будет вести журнал операций по снятию денег.
Следующее изображение в основном иллюстрирует принцип работы транзакций в системах реляционных баз данных.
Основная идея транзакций заключается в том, что когда каждый из операторов возвращает ошибку, все изменения
откат для обеспечения целостности данных. С другой стороны, если все операторы выполнены успешно, данные
изменения станут постоянными в базе данных. В результате, если у нас возникнут какие-либо отключения электроэнергии или другие
проблемы при снятии денег в банкомате, транзакции гарантируют стабильность нашего баланса. Это было бы
лучший способ выполнить все эти шаги через транзакцию, потому что четыре основных свойства транзакций
сделать все операции более точными и последовательными. Все эти свойства известны как КИСЛОТА
(атомарность, непротиворечивость, изоляция, устойчивость) в системах реляционных баз данных с первой буквой их
имена.
- A tomicity: Все операции, включенные в выполненную транзакцию
успешно. В противном случае все операции отменяются в момент сбоя и все предыдущие операции
откатываются - С onsistency: Это свойство гарантирует, что все данные будут согласованными после
транзакция завершается в соответствии с определенными правилами, ограничениями, каскадами и триггерами - Изоляция: Все транзакции изолированы от других транзакций
- Durable : модификация совершенных транзакций сохраняется в базе данных.
Предварительные требования
В этой статье мы создадим образец таблицы с помощью следующего запроса и заполним некоторые образцы данных.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Создать таблицу человека ( Personid Int Первичный ключ идентификация (1,1), Lastname Varchar (255), FirstName Varchar (255), Адрес Varchar (255), City Varch AGE INT ) GO Вставка в значения лица ('Hayes', 'Corey', '123 Wern ddu Lan Macdonald", "Charlie", "23 Peachfield Road", "CEFN EINION", 45) ВСТАВИТЬ В Person VALUES('Frost','Emma','85 Kingsway North','HOLTON',26) ВСТАВИТЬ В Person VALUES('Thomas', 'Tom','59 Dover Road', 'WESTER GRUINARDS',51) ВСТАВИТЬ В Person VALUES('Baxter','Cameron','106 Newmarket Road','HAWTHORPE',46) ВСТАВИТЬ В Person VALUES('Townsend','Imogen ','100 Shannon Way','CHIPPENHAM',20) INSERT INTO Person VALUES('Preston','Taylor','14 Pendwyallt Road','BURTON',19) INSERT INTO Person VALUES('Townsend','Imogen' ,'100 Шеннон Уэй','ЧИППЕНХЭМ',18) INSERT INTO Person VALUES('Khan','Jacob','72 Ballifeary Road','BANCFFOSFELEN',11) |
Режимы транзакций в SQL Server
SQL Server может работать в трех различных режимах транзакций, а именно:
- Транзакция Autocommit Режим — это транзакция по умолчанию для SQL Server. В этом режиме каждый
Оператор T-SQL оценивается как транзакция, и они фиксируются или откатываются в соответствии с их результатами.
Успешные операторы фиксируются, а неудачные операторы немедленно откатываются. - Режим неявной транзакции позволяет SQL Server запустить неявную
транзакция для каждого оператора DML, но нам нужно явно использовать команды фиксации или отката в конце
заявлений - Явная транзакция Режим позволяет точно определить транзакцию с началом и окончанием
точки сделки
Как определить неявную транзакцию в SQL Server
Чтобы определить неявную транзакцию, нам нужно включить опцию IMPLICIT_TRANSACTIONS .
Следующий запрос иллюстрирует пример неявной транзакции.
- Совет: Функция @@TRANCOUNT возвращает количество операторов BEGIN TRANSACTION в текущем сеансе, и мы можем использовать эту функцию для подсчета количества открытых локальных транзакций в примерах
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Установите INTICE_TRANSACTIONS на Обновление PECON SET LASTNAME = 'SAWYER', FirstName = 'Tom' , где = 2 Выберите IIF (@@ Options & 2 = 2, 'режим неявной транзакции в', 'режим неявной транзакции' ) в качестве «режим транзакции» Выберите @@ Trancount as opentransaction COMMIT TRAN SELECT @@TRANCOUNT AS OpenTransactions |
Оператор COMMIT TRANSACTION применяет изменения данных к базе данных, и измененные данные становятся постоянными.
Как определить явную транзакцию в SQL Server
Чтобы определить явную транзакцию, мы начинаем использовать команду BEGIN TRANSACTION , потому что
этот оператор определяет начальную точку явной транзакции. Он имеет следующий синтаксис:
НАЧАТЬ ТРАНЗАКЦИЮ [ {имя_транзакции | @tran_name_variable } [С ПОМЕТКОЙ ['описание']]] |
- transaction_name Параметр используется для присвоения транзакциям определенного имени
- @trans_var option — определяемая пользователем переменная, которая используется для хранения имени транзакции.
- Параметр WITH MARK позволяет пометить конкретную транзакцию в файле журнала
После определения явной транзакции через Команда BEGIN TRANSACTION , соответствующие ресурсы
получил блокировку в зависимости от уровня изоляции транзакции. По этой причине можно использовать кратчайший
транзакция поможет уменьшить проблемы с блокировкой. Следующий оператор запускает транзакцию, а затем она изменится
имя конкретной строки в таблице Person.
1 2 3 4 5 6 7 8 | Begin Tran Обновление человека SET LASTNAME = 'Lucky', FirstName = 'Luke' , где Personid = 1 SELECT @ |
Как мы указывали в предыдущем разделе, оператор COMMIT TRAN применяет данные
изменения в базе данных, и измененные данные станут постоянными. Теперь давайте завершим открытую транзакцию с
Оператор COMMIT TRAN.
1 2 3 4 5 6 7 8 | Begin Tran Обновление человека SET LASTNAME = 'Lucky', FirstName = 'Luke' , где PersonId = 1 SELECT @@ Trancount As OpenTransaction |
С другой стороны, оператор ROLLBACK TRANSACTION помогает отменить все изменения данных, которые
применяются транзакцией. В следующем примере мы изменим конкретную строку, но эта модификация данных
не будет сохраняться.
1 2 3 4 5 6 7 8 9 10 11 | BEGIN TRAN Обновление человека SET LASTNAME = 'Donald', FirstName = 'Утка', где PersonId = 2 Выберите * от человека, где человек, = 2 Ролк. ВЫБЕРИТЕ * ОТ человека, ГДЕ PersonID=2 |
В следующей таблице показана структура явных транзакций в SQL Server.
НАЧАТЬ СДЕЛКУ | Начальная точка сделки |
SQL-команды | Операторы DML и SELECT |
СОВЕРШИТЬ ТРАНЗАКЦИЮ или ОТМЕНИТЬ ТРАНЗАКЦИЮ | Применить изменение данных к базе данных или Удалить изменение данных в базе данных |
Сохранить баллы в транзакциях
Точки сохранения можно использовать для отката любой конкретной части транзакции, а не всей транзакции. Так
что мы можем откатить любую часть транзакции только между точкой сохранения и до отката.
команда. Чтобы определить точку сохранения в транзакции, мы используем СОХРАНИТЬ ТРАНЗАКЦИЮ синтаксис, а затем мы добавляем
имя точки сохранения. Теперь давайте проиллюстрируем пример использования точки сохранения. Когда мы выполним следующий запрос,
только оператор вставки будет зафиксирован, а оператор удаления будет отменен.
1 2 3 4 5 6 7 8 9 | НАЧАТЬ ТРАНЗАКЦИЮ INSERT INTO Person VALUES('Mouse', 'Micky','500 South Buena Vista Street, Burbank','California',43) СОХРАНИТЬ ТРАНЗАКЦИЮ InsertStatement УДАЛИТЬ Person WHERE PersonID=3 SELECT FROM Person ROLLBACK TRANSACTION InsertStatement COMMIT SELECT * FROM Person |
Автоматический откат транзакций в SQL Server
Как правило, транзакции включают более одного запроса. Таким образом, если один из операторов SQL возвращает
error все модификации стираются, а остальные операторы не выполняются. Этот процесс называется
Автоматический откат Транзакция в SQL. Теперь давайте объясним этот принцип очень
простой пример.
1 2 3 4 5 6 7 8 | BEGIN TRAN INSERT INTO Person VALUES('Bunny', 'Bugs','742 Evergreen Terrace','Springfield',54)
Person=7 WHERE9ID SET Age='MiddleAge0003 SELECT * FROM Person
COMMIT TRAN |
Как видно из приведенного выше изображения, в операторе обновления произошла ошибка из-за типа данных.
вопрос конверсии. В этом случае вставленные данные стираются, а оператор select не выполняется.
Отмеченные транзакции в SQL Server
SQL Server позволяет нам помечать и добавлять описание к конкретной транзакции в файлах журнала. Таким образом, мы можем
создать точку восстановления, которая не зависит от времени. Например, когда происходит случайное изменение данных
в базе данных, и мы не знаем точное время модификации данных, усилия по восстановлению данных могут быть предприняты
много времени. По этой причине помеченные транзакции могут быть полезным решением для определения точного времени данных.
модификации. Чтобы создать отмеченную транзакцию, нам нужно дать имя транзакции, а также нам нужно
добавить С ПОМЕТКОЙ синтаксис. В следующем запросе мы удалим некоторые строки, а также отметим
изменения в файле журнала.
BEGIN TRAN DeletePerson WITH MARK 'MarkedTransactionDescription' DELETE Person WHERE PersonID МЕЖДУ 3 И 4
COMMIT TRAN DeletePerson |
В таблице logmarkhistory хранятся сведения о каждой отмеченной транзакции, которая была зафиксирована и
он находится в база данных msdb .
ВЫБЕРИТЕ * ИЗ msdb.dbo.logmarkhistory |
Как мы видим на изображении выше, logmarkhistory дает все подробности о помеченной транзакции.
Следующие два параметра помогают использовать помеченные транзакции в качестве точки восстановления.
- STOPATMARK выполняет накат до отметки и включает отмеченную транзакцию в накат
- STOPBEFOREMARK выполняет накат до отметки и исключает отмеченную транзакцию из наката
Вы можете прочитать следующие статьи, чтобы узнать больше о восстановлении базы данных из резервных копий журнала транзакций:
- Восстановление данных из журнала транзакций SQL Server
- Восстановление связанных баз данных, содержащих отмеченную транзакцию
Вывод
В этой статье мы говорили о транзакции в операторах SQL Server.