В данном материале я попытался объединить все основные моменты Transact-SQL (Что такое T-SQL), которые помогут начинающим программистам баз данных освоить данный язык и писать запросы и приложения на языке Transact-SQL.
Программирование баз данных, а если говорить конкретней, то баз данных под управлением Microsoft SQL Server, стало очень популярно, именно поэтому я решил сделать своего рода мини справочник, в котором можно найти все основные моменты с пояснениями и, конечно же, с примерами.
Для того чтобы потренироваться писать SQL запросы или создавать объекты базы данных, можете использовать бесплатную редакцию SQL Server Express, на момент составления справочника последней версией является Microsoft SQL Server 2014 Express.
- Transact-SQL справочник для начинающих — описание справочника
- База данных
- Создание
- Удаление
- Изменение
- Типы данных
- Точные числа
- Приблизительные числа
- Дата и время
- Символьные строки
- Двоичные данные
- Другие
- Таблицы
- Создание
- Добавление колонки
- Изменение типа данных
- Удаление колонки
- Удаление таблицы
- Представления
- Создание
- Изменение
- Удаление
- Системные представления
- Функции
- Создание
- Изменение
- Удаление
- Встроенные функции
- Системные функции
- Агрегатные функции
- Строковые функции
- Математические функции
- Функции даты и времени
- Функции преобразование
- Табличные функции
- Создание
- Изменение
- Удаление
- Процедуры
- Создание
- Изменение
- Удаление
- Системные процедуры
- Триггеры
- Создание
- Изменение
- Удаление
- Включение/Отключение
- Индексы
- Создание
- Отключение
- Удаление
- Курсоры
- Запросы DML
- SELECT
- UPDATE
- INSERT
- DELETE
Transact-SQL справочник для начинающих — описание справочника
Данный справочник будет выглядеть следующим образом, сначала я приведу небольшое оглавление с навигацией, затем начнется сам справочник, по каждому пункту будут комментарии, пояснения и примеры. Также, если мы уже подробно рассматривали или использовали где-либо в материалах на нашем сайте тот или иной объект или действие, я, конечно же, буду ставить ссылки, для того чтобы Вы могли посмотреть подробные примеры или как использовать то или иное действие на практике.
Так как охватить абсолютно все просто невозможно, поэтому не удивляйтесь, если Вы что-то здесь не обнаружили. Еще раз повторю, что данный справочник создан для начинающих программистов на Transact-SQL, а также для простых админов, которым периодически требуется выгружать какие-то данные с SQL сервера.
Для детального изучения языка SQL рекомендую почитать мою книгу «SQL код – самоучитель по SQL для начинающих программистов», в которой я максимально подробно, с большим количеством примеров рассказываю о языке SQL. Для изучения языка T-SQL на профессиональном уровне рекомендую посмотреть мои видеокурсы по T-SQL.
База данных
ДДаже начинающий программист Transact-SQL должен знать, как создается база данных или изменяются ее свойства, поэтому прежде чем рассматривать таблицы, представления, функции и все остальное, давайте разберем процесс создания, изменения и удаления базы данных на Transact-SQL.
Создание
Для того чтобы создать базу данных, необходимо выполнить следующий запрос:
CREATE DATABASE test
где, test это название базы данных.
Подробней о создании базы данных на SQL сервере, мы разговаривали в материале Как создать базу данных в MS SQL Server
Удаление
Если Вам необходимо удалить базу данных, то можете использовать запрос:
DROP DATABASE test
Изменение
Для изменений параметров базы данных можно использовать графический интерфейс Management Studio, в котором все параметры подробно описаны, а можно посылать запросы ALTER DATABASE, например, для включения автоматического сжатия базы данных test, используем следующий запрос
ALTER DATABASE test SET AUTO_SHRINK ON; --А для выключения ALTER DATABASE test SET AUTO_SHRINK OFF;
Надеюсь понятно, ALTER DATABASE команда на изменение, test название изменяемой базы данных, SET команда, указывающая на то, что мы будем изменять параметры базы данных, AUTO_SHRINK непосредственно сам параметр, ON/OFF значение параметра.
Типы данных
Самые распространенные и часто используемые
Точные числа
- tinyint — 1 байт
- smallint — 2 байта
- int — 4 байта
- bigint — 8 байт
- numeric и decimal (тип с фиксированной точностью и масштабом)
- money — 8 байт
- smallmoney — 4 байт
Приблизительные числа
- float [ (n) ] – размер зависит от n (n может быть от 1 до 53, по умолчанию 53)
- real — 4 байта
Дата и время
- date – дата
- time — время
- datetime — дата, включающая время дня с долями секунды в 24-часовом формате.
Символьные строки
- char [ ( n ) ] – строка с фиксированной длиной, где n длина строки (от 1 до 8000). Размер при хранении составляет n байт.
- varchar [ ( n | max ) ] — строка с фиксированной длиной, где n длина строки (от 1 до 8000). Если указать max, то, максимальный размер при хранении составит 2^31-1 байт (2 ГБ), а при указании n то фактическая длина введенных данных плюс 2 байта.
- text – строковые данные переменной длины, максимальный размер 2 147 483 647 байт (2 ГБ).
- nchar [ ( n ) ] — строка с фиксированной длиной в Юникоде, где n длина строки (от 1 до 4000). Размер при хранении составляет удвоенное значение n в байтах
- nvarchar [ ( n | max ) ] — строка с фиксированной длиной в Юникоде, где n длина строки (от 1 до 4000). При указании max, максимальный размер при хранении составит 2^31-1 байт (2 ГБ), а если n, то удвоенная фактическая длина введенных данных плюс 2 байта.
- ntext — строковые данные переменной длины, с максимальной длиной строки 1 073 741 823 байт.
Двоичные данные
- binary [ ( n ) ] — двоичные данные с фиксированной длиной, размером n байт, где n значение от 1 до 8000. Размер при хранении составляет n байт.
- varbinary [ ( n | max) ] — двоичные данные с переменной длиной, где n может иметь значение от 1 до 8000. Если указать max то максимальный размер при хранении составит 2^31-1 байт(2 ГБ). При указании n то размер хранения это фактическая длина введенных данных плюс 2 байта.
- image — двоичные данные переменной длины, размером от 0 до 2^31 – 1 (2 147 483 647) байт.
Другие
- xml –хранение xml данных. Подробно рассматривали в материале Transact-sql – работа с xml, а если Вы вообще не знаете что такое XML, то об это мы разговаривали в статье Основы XML для начинающих.
- table – хранение результирующего набора строк.
Таблицы
Примеров создания таблиц на этом сайте достаточно, так как практически в каждой статье связанной с SQL я привожу пример создания тестовой таблицы, но для закрепления знаний, давайте создадим, модифицируем и удалим тестовую таблицу. Как раз посмотрим на то, как задаются типы данных полей в таблицах на Transact-SQL.
Создание
CREATE TABLE test_table( [id] [int] IDENTITY(1,1) NOT NULL,--идентификатор, целое число int, не разрешены значения NULL [fio] [varchar](50) NULL, --ФИО, строка длиной 50 символов, значения NULL разрешены [summa] [float] NULL, --сумма, приблизительное числовое значение, значения NULL разрешены [date_create] [datetime] NULL, --дата и время, значения NULL разрешены [comment] [varchar](100) NULL --строка длиной 100 символов, значения NULL разрешены ) ON [PRIMARY] GO
Добавление колонки
ALTER TABLE test_table ADD prosto_pole numeric(18, 0) NULL
Где,
- test_table — это название таблицы;
- add — команда на добавление;
- prosto_pole – название колонки;
- pole numeric(18, 0) – тип данных новой колонки;
- NULL – параметр означающий что в данном поле можно хранить значение NULL.
Изменение типа данных
Давайте изменим, тип данных нового поля, которое мы только что создали (prosto_pole) с numeric(18, 0) на bigint и увеличим длину поля comment до 300 символов.
ALTER TABLE test_table ALTER COLUMN prosto_pole bigint; ALTER TABLE test_table ALTER COLUMN comment varchar(300);
Примечание! SQL сервер не сможет выполнить изменение типа данных, если преобразование значений в этих полях невозможно, в этом случае придется удалять колонку, со всем данными, и добавлять заново или очищать все данные в этом поле.
Удаление колонки
Для удаления определенной колонки используем команду drop, например, для удаления поля prosto_pole используем следующий запрос
ALTER TABLE test_table DROP COLUMN prosto_pole
Удаление таблицы
Для того чтобы удалить таблицу, напишем вот такой простой запрос, где test_table и есть таблица для удаления
DROP TABLE test_table
Представления
Очень полезным объектом в базе данных является представление (VIEW) или по-нашему просто вьюха. Если кто не знает, то представление, это своего рода хранимый запрос, к которому можно обращаться также как и к таблице. Давайте создадим представление на основе тестовой таблицы test_table, и допустим, что очень часто нам требуется писать запрос, например, по условию сумма больше 1000, поэтому для того чтобы каждый раз не писать этот запрос мы один раз напишем представление, и впоследствии будем обращаться уже к нему.
Создание
CREATE VIEW test_view AS SELECT id, fio, comment FROM test_table WHERE summa > 1000 GO
Пример обращения к представлению:
SELECT * FROM test_view
Изменение
ALTER VIEW test_view AS SELECT id, fio, comment FROM test_table WHERE summa > 1500 GO
Удаление
DROP VIEW test_view
Системные представления
В СУБД MS SQL Server есть таки системные объекты, которые могут предоставить иногда достаточно полезную информацию, например системные представления. Сейчас мы разберем парочку таких представлений. Обращаться к ним можно также как и к обычным представлениям (например, select * from название представление)
- sys.all_objects – содержит все объекты базы данных, включая такие параметры как: название, тип, дата создания и другие.
- sys.all_columns – возвращает все колонки таблиц с подробными их характеристиками.
- sys.all_views – возвращает все представления базы данных.
- sys.tables – все таблицы базы данных.
- sys.triggers – все триггеры базы данных.
- sys.databases – все базы данных на сервере.
- sys.sysprocesses – активные процессы, сессии в базе данных.
Их на самом деле очень много, поэтому все разобрать, не получиться. Если Вы хотите посмотреть, как их можно использовать на практике, то это мы уже делали, например, в материалах Как узнать активные сеансы пользователей в MS Sql 2008
Функции
MS SQL сервер позволяет создавать функции, которые будут возвращать определенные данные, другими словами, пользователь сам может написать функцию и в дальнейшем ее использовать, например, когда необходимо получить значения, требующие сложных вычислений или сложную выборку данных. Иногда просто для уменьшения кода, когда вызов функции заменят часто требующиеся значения в разных запросах и приложениях.
Создание
CREATE FUNCTION test_function (@par1 bigint, @par2 float) RETURNS varchar(300) AS BEGIN DECLARE @rezult varchar(300) SELECT @rezult=comment FROM test_table WHERE id = @par1 AND summa > @par2 RETURN @rezult END
Где,
- CREATE FUNCTION – команда на создание объекта функция;
- test_function – название новой функции;
- @par1 и @par2 – входящие параметры;
- RETURNS varchar(300) – тип возвращаемого результата;
- DECLARE @rezult varchar(300) – объявление переменной с типом varchar(300);
- Инструкция select в нашем случае и есть действия функции;
- RETURN @rezult – возвращаем результат;
- BEGIN и END – соответственно начала и конец кода функции.
Пример использования ее в запросе:
SELECT test_function(1, 20)
Изменение
ALTER FUNCTION test_function (@par1 bigint, @par2 float) RETURNS varchar(300) AS BEGIN DECLARE @rezult varchar(300) SELECT @rezult=comment FROM test_table_new WHERE id = @par1 AND summa >= @par2 RETURN @rezult END
Удаление
DROP FUNCTION test_function
Встроенные функции
Помимо того, что SQL сервер позволяет создавать пользовательские функции, он также предоставляет возможность использовать встроенные функции, которые за Вас уже написали разработчики СУБД. Их очень много, поэтому самые распространенные я разбил на группы и попытался их кратко описать.
Системные функции
Здесь я приведу несколько примеров функций, которые возвращают различные системные данные
- @@VERSION – возвращает версию SQL сервера;
- @@SERVERNAME – возвращает имя сервера;
- SUSER_NAME() – имя входа пользователя на сервер, другими словами, под каким логином работает тот или иной пользователь;
- user_name() – имя пользователя базы данных;
- @@SERVICENAME – название сервиса СУБД;
- @@IDENTITY — последний вставленный в таблицу идентификатор;
- db_name() — имя текущей базы данных;
- db_id() – идентификатор базы данных.
Агрегатные функции
Функции, которые вычисляют какое-то значение на основе набора (группы) значений. Если при вызове этих функций нужно указать колонку для вывода результата, то необходимо выполнить группировку данных (group by) по данному полю. Подробно данную конструкцию мы рассматривали в статье Transact-SQL группировка данных group by
- avg – возвращает среднее значение;
- count – количество значений;
- max – максимальное значение;
- min – минимальное значение;
- sum – сумма значений.
Пример использования:
SELECT COUNT(*) as count, SUM(summa) as sum, MAX(id) as max, MIN(id) as min, AVG(summa) as avg FROM test_table
Строковые функции
Данный вид функций соответственно работает со строками.
Left (строковое выражение, количество символов) – возвращает указанное число символов строки начиная слева.
Пример
SELECT LEFT('Пример по работе функции left', 10) --Результат 'Пример по'
Right (строковое выражение, количество символов) – возвращает указанное число символов строки начиная справа
Пример
SELECT Right('Пример по работе функции Right', 10) -- Результат 'кции Right'
Len (строка) – возвращает длину строки.
Пример
SELECT len('Пример по работе функции len') --Результат 28
Lower (строка) – возвращает строку, в которой все символы приведены к нижнему регистру.
Пример
SELECT lower('Пример по работе функции lower') --Результат 'пример по работе функции lower'
Upper (строка) — возвращает строку, в которой все символы приведены к верхнему регистру.
Пример
SELECT Upper('Пример по работе функции Upper') --Результат 'ПРИМЕР ПО РАБОТЕ ФУНКЦИИ UPPER'
Ltrim (строка) – возвращает строку, в которой все начальные пробелы удалены.
Пример
SELECT ltrim(' Пример по работе функции ltrim') --Результат 'Пример по работе функции ltrim'
Rtrim (строка) – возвращает строку, в которой все пробелы справа удалены
Пример
SELECT Rtrim (' Пример по работе функции Rtrim ') -- Результат' Пример по работе функции Rtrim'
Заметка! Подробнее про функции TRIM, LTRIM и RTRIM в T-SQL.
Replace (строка, что ищем, на что заменяем) – заменяет в строковом выражении все вхождения указанные во втором параметре, символами указанным в третьем параметре.
Пример
SELECT Replace ('Пример по работе функции Replace', 'по работе', 'ЗАМЕНА' ) -- Результат 'Пример ЗАМЕНА функции Replace'
Replicate (строка, количество повторений) – повторяет строку (первый параметр) столько раз, сколько указанно во втором параметре.
Пример
SELECT Replicate ('Пример Replicate ', 3 ) -- Результат 'Пример Replicate Пример Replicate Пример Replicate '
Reverse (строка) – возвращает все в обратном порядке.
Пример
SELECT Reverse ('Пример по работе функции Reverse') -- Результат 'esreveR иицкнуф етобар оп ремирП'
Space (число пробелов) – возвращает строку в виде указанного количества пробелов.
Пример
SELECT Space(10) -- Результат ' '
Substring (строка, начальная позиция, сколько символов) – возвращает строку, длиной в число указанное в третьем параметре, начиная с символа указанного во втором параметре.
Пример
SELECT Substring('Пример по работе функции Substring', 11, 14) -- Результат 'работе функции'
Про строковые функции мы также разговаривали в материале Сочетание строковых функций на Transact-SQL
Математические функции
Round (число, точность округления) – округляет числовое выражение до числа знаков указанного во втором параметре
Пример
SELECT Round(10.4569, 2) -- Результат '10.4600'
Floor (число) – возвращает целое число, округленное в меньшую сторону.
Пример
SELECT Floor(10.4569) -- Результат '10'
Ceiling (число) – возвращает целое число, округленное в большую сторону.
Пример
SELECT Ceiling (10.4569) -- Результат '11'
Power (число, степень) — возвращает число возведенное в степень указанную во втором параметре.
Пример
SELECT Power(5,2) -- Результат '25'
Square (число) – возвращает числовое значение, возведенное в квадрат
Пример
SELECT Square(5) -- Результат '25'
Abs (число) – возвращает абсолютное положительное значение
Пример
SELECT Abs(-5) -- Результат '5'
Log(число) – натуральный логарифм с плавающей запятой.
Пример
SELECT Log(5) -- Результат '1,6094379124341'
Pi – число пи.
Пример
SELECT Pi() -- Результат '3,14159265358979'
Rand – возвращает случайное число с плавающей запятой от 0 до 1
Пример
SELECT rand() -- Результат '0,713273187517105'
Функции даты и времени
Getdate() – возвращает текущую дату и время
Пример
SELECT Getdate() -- Результат '2014-10-24 16:36:23.683'
Day(дата) – возвращает день из даты.
Пример
SELECT Day(Getdate()) -- Результат '24'
Month(дата) – возвращает номер месяца из даты.
Пример
SELECT Month(Getdate()) -- Результат '10'
Year (дата) –возвращает год из даты
Пример
SELECT year(Getdate()) -- Результат '2014'
DATEPART(раздел даты, дата) – возвращает из даты указанный раздел (DD,MM,YYYY и др.)
Пример
SELECT DATEPART(MM,GETDATE()) -- Результат '10'
Isdate (дата) – проверяет введенное выражение, является ли оно датой
Пример
SELECT Isdate(GETDATE()) -- Результат '1'
Функции преобразование
Cast (выражение as тип данных) – функция для преобразования одного типа в другой. В примере мы преобразуем тип float в int
Пример
SELECT CAST(10.54 as int) --результат 10
Convert – (тип данных, выражение, формат даты) – функция для преобразования одного типа данных в другой. Очень часто ее используют для преобразования даты, используя при этом третий необязательный параметр — формат даты.
Пример
SELECT GETDATE(), CONVERT(DATE, GETDATE(), 104) --Результат --2014-10-24 15:20:45.270 – без преобразования; --2014-10-24 после преобразования.
Табличные функции
Создаются, для того чтобы получать из них данные как из таблиц, но после различного рода вычислений. Подробно о табличных функциях мы разговаривали в материале Transact-sql – Табличные функции и временные таблицы
Создание
--название нашей функции CREATE FUNCTION fun_test_tabl ( --входящие параметры и их тип @id INT ) --возвращающее значение, т.е. таблица RETURNS TABLE AS --сразу возвращаем результат RETURN ( --сам запрос или какие то вычисления SELECT * FROM test_table where id = @id ) GO
Изменение
--название нашей функции ALTER FUNCTION fun_test_tabl ( --входящие параметры и их тип @id INT ) --возвращающее значение, т.е. таблица RETURNS TABLE AS --сразу возвращаем результат RETURN ( --сам запрос или какие то вычисления SELECT * FROM test_table where id = @id and summa > 100 ) GO
Удаление
DROP FUNCTION fun_test_tabl
Как видите, для того чтобы создать, изменить или удалить такие функции используются такие же операторы, как и для обычных функций, отличия лишь в том, какой тип возвращает функция.
Пример обращения к этой функции
SELECT * FROM fun_test_tabl(1)
Процедуры
Процедуры – это набор SQL инструкций, которые компилируются один раз, и могут принимать, как и функции, различные параметры. Используются для упрощения расчетов, выполнения групповых действий.
Создание
CREATE PROCEDURE sp_test_procedure (@id INT) AS --объявляем переменные DECLARE @sum FLOAT --SQL инструкции SET @sum = 100 UPDATE test_table SET summa = summa + @sum WHERE id = @id GO
Изменение
ALTER PROCEDURE sp_test_procedure (@id int) AS --объявляем переменные DECLARE @sum float --SQL инструкции SET @sum = 500 UPDATE test_table SET summa = summa + @sum WHERE id = @id GO
Удаление
DROP PROCEDURE sp_test_procedure
Вызов процедуры
Можно вызывать по разному, например:
EXECUTE sp_test_procedure 1 --или EXEC sp_test_procedure 1
Где, EXECUTE и EXEC вызов процедуры, sp_test_procedure соответственно название нашей процедуры, 1 значение параметра
Системные процедуры
Системные процедуры – это процедуры для выполнения различных административных действий как над объектами на сервере, так и над конфигурацией самого сервера. Вызываются они также как и обычные процедуры, но в контексте любой базы данных.
Их огромное множество, поэтому приведу всего несколько примеров.
sp_configure – процедура для отображения и внесения изменений в конфигурацию ядра СУБД. Первый параметр название параметра конфигурации, второй параметр значение.
Пример
--изменяем значение параметра EXEC sp_configure 'Ad Hoc Distributed Queries',1 reconfigure --применяем EXEC sp_configure --просто просматриваем значения всех параметров
где, ‘Ad Hoc Distributed Queries’ — это название параметра, 1 соответственно значение, на которое мы хотим изменить, reconfigure применят введенное значение.
На практике мы применяли эту процедуру в материале Межбазовый запрос на Transact-SQL
sp_executesql – выполняет инструкцию или набор инструкций Transact-SQL, которые могут формироваться динамически. Данную процедуры мы использовали в материале журналирование изменений данных в таблице на Transact-SQL
Пример
EXECUTE sp_executesql N'SELECT * FROM test_table WHERE id = @id', N'@id int', @id = 1
Где, первый параметр — sql инструкция (строка в Юникоде), второй — определение всех параметров встроенных в sql инструкцию, третий — значение параметров.
sp_help – возвращает подробные сведения о любом объекте базы данных.
Пример
EXECUTE sp_help 'test_table'
sp_rename – переименовывает объект в базе данных. Можно использовать для переименования таблиц, индексов, название колонок в таблицах, Не рекомендуется использовать эту процедуру для переименования пользовательских процедур, триггеров, функций.
Пример переименования таблицы
EXEC sp_rename 'test_table', 'test_table_new'
где, первым параметром идет объект со старым названием, а второй параметр — это новое название объекта.
Пример переименования столбца в таблице
EXEC sp_rename 'test_table.summa', 'summa_new', 'COLUMN'
Третьим параметром указывается, что переименовывается колонка.
Триггеры
Триггер – это обычная процедура, но вызывается она событием, а не пользователем. Событие, например, может быть вставка новой строки в таблицу (insert), обновление данных в таблице (update) или удаление данных из таблицы (delete).
Создание
CREATE TRIGGER trg_test_table_update ON test_table for UPDATE --можно также delete, insert AS BEGIN --sql инструкции в случае UPDATE END GO
Изменение
ALTER TRIGGER trg_test_table_update ON test_table for insert --можно также delete, update AS BEGIN --sql инструкции в случае insert END GO
Удаление
DROP TRIGGER trg_test_table_update
Включение/Отключение
--отключение DISABLE TRIGGER trg_test_table_update ON test_table; --включение ENABLE TRIGGER trg_test_table_update ON test_table;
О триггерах мы разговаривали в статье — Как создать триггер на Transact-SQL.
Индексы
Это объект базы данных, который повышает производительность поиска данных, за счет сортировки данных по определенному полю. Если провести аналогию то, например, искать определенную информацию в книге намного легче и быстрей по его оглавлению, чем, если бы этого оглавления не было. В СУБД MS SQL Server существует следующие типы индексов:
Кластеризованный индекс — при таком индексе строки в таблице сортируются с заданным ключом, т.е. указанным полем. Данный тип индексов у таблицы в MS SQL сервере может быть только один и, начиная с MS SQL 2000, он автоматически создается при указании в таблице первичного ключа (PRIMARY KEY).
Некластеризованный индекс – при использовании такого типа индексов в индексе содержатся отсортированные по указанному полю указатели строк, а не сами строки, за счет чего происходит быстрый поиск необходимой строки. Таких индексов у таблицы может быть несколько.
Колоночный индекс (columnstore index) – данный тип индексов основан на технологии хранения данных таблиц не виде строк, а виде столбцов (отсюда и название), у таблицы может быть один columnstore индекс.
При использовании такого типа индексов таблица сразу становится только для чтения, другими словами, добавить или изменить данные в таблице уже будет нельзя, для этого придется отключать индекс, добавлять/изменять данные, затем включать индекс обратно.
Такие индексы подходят для очень большого набора данных, используемых в хранилищах.
Операции, в которых используются агрегатные функции с использованием группировки, выполняются намного быстрей (в несколько раз!) при наличии такого индекса.
Columnstore index доступен начиная с 2012 версии SQL сервера в редакциях Enterprise, Developer и Evaluation.
Создание
Кластеризованного индекса
CREATE CLUSTERED INDEX idx_clus_one ON test_table(id) GO
Где, CREATE CLUSTERED INDEX — это инструкция к созданию кластеризованного индекса, idx_clus_one название индекса, test_table(id) соответственно таблица и ключевое поле для сортировки.
Некластеризованного индекса
CREATE INDEX idx_no_clus ON test_table(summa) GO
Columnstore index
CREATE columnstore INDEX idx_columnstore ON test_table(date_create) GO
Отключение
--отключение ALTER INDEX idx_no_clus ON test_table DISABLE --включение, перестроение ALTER INDEX idx_no_clus ON test_table REBUILD
Удаление
DROP INDEX idx_no_clus ON test_table GO
Курсоры
Курсор — это своего рода тип данных, который используется в основном в процедурах и триггерах. Он представляет собой обычный набор данных, т.е. результат выполнения запроса.
Пример (все это в коде процедуры)
--объявляем переменные DECLARE @id BIGINT DECLARE @fio VARCHAR(100) DECLARE @summa FLOAT --объявляем курсор DECLARE test_cur CURSOR FOR SELECT id, fio, summa FROM test_table --открываем курсор OPEN test_cur --считываем данные первой строки в курсоре --и записываем их в переменные FETCH NEXT FROM test_cur INTO @id, @fio, @summa --запускаем цикл до тех пор, пока не закончатся строки в курсоре WHILE @@FETCH_STATUS = 0 BEGIN --на каждую итерацию цикла можем выполнять sql инструкции --..................SQL инструкции................. --считываем следующую строку курсора FETCH NEXT FROM test_cur INTO @id, @fio, @summa END --закрываем курсор CLOSE test_cur DEALLOCATE test_cur
Подробно о курсорах мы разговаривали в материале Использование курсоров и циклов в Transact-SQL.
Запросы DML
DML (Data Manipulation Language) – это операторы SQL, с помощью которых осуществляется манипуляция данными. К ним относятся select, update, insert, delete.
SELECT
Оператор SQL с помощью которого осуществляется выборка данных. Подробно о нем мы разговаривали в материале Язык запросов SQL – Оператор SELECT
Пример
SELECT * FROM test_table
UPDATE
Используется для обновления данных
Пример
--обновятся все строки в таблице UPDATE test_table SET summa=500 --обновятся только строки, у которых id больше 10 UPDATE test_table SET summa=100 WHERE id > 10
INSERT
Оператор на добавление данных
--добавление одной строки INSERT INTO test_table (fio, summa, date_create, comment) VALUES ('ФИО',100, '26.10.2014', 'тестовая запись') --массовое добавление на основе запроса INSERT INTO test_table SELECT fio, summa, date_create, comment FROM test_table
DELETE
С помощью этого оператора можно удалить данные.
Пример
--очищение всей таблицы DELETE test_table --удаление только строк попавших под условие DELETE test_table WHERE summa > 100
Заметка! Для профессионального изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL.
Вот и все, справочник закончился! Надеюсь, он Вам хоть как-то помог. Удачи!
Приглашаю всех желающих пройти мои онлайн-курсы по изучению языка T-SQL – https://self-learning.ru/courses/t-sql
На курсах используется моя авторская последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL. Каждый курс включает огромное количество материалов: видео, текстовый материал, тесты, домашние задания, скрипты, а также сертификат о прохождении.
На курсах Вы можете заниматься в комфортном для себя темпе не выходя из дома в любое удобное для Вас время.