Условные выражения

Последнее обновление: 14.08.2017

Для выполнения действий по условию используется выражение IF ... ELSE. SQL Server вычисляет выражение после ключевого слова IF. И если оно истинно, то выполняются инструкции после ключевого слова IF. Если условие ложно, то выполняются инструкции после ключевого слова ELSE.

Если после IF или ELSE располагает блок инструкций, то этот блок заключается между ключевыми словами BEGIN и END:

IF условие
	{инструкция|BEGIN...END}
[ELSE
	{инструкция|BEGIN...END}]

Выражение ELSE является необязательным, и его можно опускать.

Например, пусть у нас есть следующие таблицы:

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 дней:

DECLARE @lastDate DATE

SELECT @lastDate = MAX(CreatedAt) FROM Orders

IF DATEDIFF(day, @lastDate, GETDATE()) > 10
	PRINT 'За последние десять дней не было заказов'

Добавим выражение ELSE:

DECLARE @lastDate DATE

SELECT @lastDate = MAX(CreatedAt) FROM Orders

IF DATEDIFF(day, @lastDate, GETDATE()) > 10
	PRINT 'За последние десять дней не было заказов'
ELSE 
	PRINT 'За последние десять дней были заказы'
Выражение IF...ELSE в T-SQL и MS SQL Server

Если после IF или ELSE идут две и более инструкций, то они заключаются в блок BEGIN...END:

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 'Заказы в базе данных отсутствуют'
Выражение BEGIN...END в T-SQL и MS SQL Server
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850