Для выполнения действий по условию используется выражение IF ... ELSE. SQL Server вычисляет выражение после ключевого слово IF. И если оно истинно, то выполняются инструкции после ключевого слова IF. Если условие ложно, то выполняются инструкции после ключевого слова ELSE.
Если после IF или ELSE располагает блок инструкций, то этот блок заключается между ключевыми словами BEGIN и END:
1
2
3
4
| IF условие {инструкция| BEGIN ... END } [ ELSE {инструкция| BEGIN ... END }] |
Выражение ELSE является необязательным, и его можно опускать.
Например, пусть у нас есть следующие таблицы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY , ProductName NVARCHAR(30) NOT NULL , Manufacturer NVARCHAR(20) NOT NULL , ProductCount INT DEFAULT 0, Price MONEY NOT NULL ); CREATE TABLE Customers ( Id INT IDENTITY PRIMARY KEY , FirstName NVARCHAR(30) NOT NULL ); CREATE TABLE Orders ( Id INT IDENTITY PRIMARY KEY , ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE , CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE , CreatedAt DATE NOT NULL , ProductCount INT DEFAULT 1, Price MONEY NOT NULL ); |
Таблица Orders представляет заказы, а столбец CreatedAt - дату заказов. Узнаем, были ли заказы за последние 10 дней:
1
2
3
4
5
6
| DECLARE @lastDate DATE SELECT @lastDate = MAX (CreatedAt) FROM Orders IF DATEDIFF( day , @lastDate, GETDATE()) > 10 PRINT 'За последние десять дней не было заказов' |
Добавим выражение ELSE:
1
2
3
4
5
6
7
8
| DECLARE @lastDate DATE SELECT @lastDate = MAX (CreatedAt) FROM Orders IF DATEDIFF( day , @lastDate, GETDATE()) > 10 PRINT 'За последние десять дней не было заказов' ELSE PRINT 'За последние десять дней были заказы' |
Если после IF или ELSE идут две и более инструкций, то они заключаются в блок BEGIN...END:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| DECLARE @lastDate DATE , @ count INT , @ sum MONEY SELECT @lastDate = MAX (CreatedAt), @ count = SUM (ProductCount) , @ sum = SUM (ProductCount * Price) FROM Orders IF @ count > 0 BEGIN PRINT 'Дата последнего заказа: ' + CONVERT (NVARCHAR, @lastDate) PRINT 'Продано ' + CONVERT (NVARCHAR, @ count ) + ' единиц(ы)' PRINT 'На общую сумму ' + CONVERT (NVARCHAR, @ sum ) END ; ELSE PRINT 'Заказы в базе данных отсутствуют' |
Комментариев нет:
Отправить комментарий