T sql

Учебник.

Составление инструкций Transact-SQLTutorial: Writing Transact-SQL Statements

Учебник «Составление инструкций Transact-SQLTransact-SQL ».Welcome to the Writing Transact-SQLTransact-SQL Statements tutorial.Этот учебник предназначен для пользователей, не умеющих составлять инструкции SQL.This tutorial is intended for users who are new to writing SQL statements.Он поможет новым пользователям начать обучение с просмотра некоторых простых инструкций по созданию таблиц и вставке данных.It will help new users get started by reviewing some basic statements for creating tables and inserting data.Этот учебник использует язык Transact-SQLTransact-SQL, MicrosoftMicrosoft -реализацию стандарта SQL.This tutorial uses Transact-SQLTransact-SQL, the MicrosoftMicrosoft implementation of the SQL standard.Он представляет собой краткое введение в язык Transact-SQLTransact-SQL и не заменяет обучение языку Transact-SQLTransact-SQL .This tutorial is intended as a brief introduction to the Transact-SQLTransact-SQL language and not as a replacement for a Transact-SQLTransact-SQL class.Инструкции в учебнике намеренно простые и не представляют всей сложности типичной производственной базы данных.The statements in this tutorial are intentionally simple, and are not meant to represent the complexity found in a typical production database.

ПРИМЕЧАНИЕ . Если вы новичок, то, возможно, вам будет проще использовать Среда SQL Server Management StudioSQL Server Management Studio , а не создавать инструкции Transact-SQLTransact-SQL .NOTE: If you are a beginner you might find it easier to use Среда SQL Server Management StudioSQL Server Management Studio instead of writing Transact-SQLTransact-SQL statements.

Дополнительные сведенияFinding More Information

Дополнительные сведения об отдельных инструкциях см. в электронной документации по SQL Server либо по имени инструкции, либо используя вкладку "Содержание" для просмотра 1800 языковых элементов, перечисленных в алфавитном порядке в разделе Справочник по Transact-SQL (компонент Database Engine).To find more information about any specific statement, either search for the statement by name in SQL Server Books Online, or use the Contents to browse the 1,800 language elements listed alphabetically under Transact-SQL Reference (Database Engine).Еще одной хорошей стратегией нахождения информации является ее поиск по ключевым словам, относящимся к интересующей вас тематике.Another good strategy for finding information is to search for key words that are related to the subject matter you are interested in.Например, чтобы узнать, как возвратить часть даты (например, месяц), выполните поиск в индексе по датам [SQL Server], а затем используйте функции извлечения частей даты.For example, if you want to know how to return a part of a date (such as the month), search the index for dates [SQL Server], and then select dateparts.Это приведет к разделу DATEPART (Transact-SQL).This takes you to the topic DATEPART (Transact-SQL).В качестве другого примера, чтобы выяснить, как работать со строками, ищите строковые функции.As another example, to find out how to work with strings, search for string functions.Это приведет к разделу Строковые функции (Transact-SQL).This takes you to the topic String Functions (Transact-SQL).

Обзор учебникаWhat You Will Learn

В этом учебнике показано, как создать базу данных и таблицу в ней, вставить данные в таблицу, обновить их, прочитать и удалить данные, удалить таблицу.This tutorial shows you how to create a database, create a table in the database, insert data into the table, update the data, read the data, delete the data, and then delete the table.Будут созданы представления и хранимые процедуры, а для базы данных и данных будет настроен пользователь.You will create views and stored procedures and configure a user to the database and the data.

Учебник разделен на три занятия.This tutorial is divided into three lessons:

Урок 1.

Создание объектов базы данныхLesson 1: Creating Database Objects
В этом занятии будет создана база данных, таблица в ней, вставлены данные в таблицу, затем данные будут обновлены и прочитаны.In this lesson, you create a database, create a table in the database, insert data into the table, update the data, and read the data.

Занятие 2.

Настройка разрешений на объекты базы данныхLesson 2: Configuring Permissions on Database Objects
В этом занятии будут созданы имя входа и пользователь.In this lesson, you create a login and user.Также будут созданы представление и хранимая процедура, и пользователю будет предоставлено разрешение на нее.You will also create a view and a stored procedure, and then grant the user permission to the stored procedure.

Урок 3. Удаление объектов базы данныхLesson 3: Deleting Database Objects
В этом занятии доступ к данным будет запрещен, данные из таблицы удалены, сама таблица тоже удалена вместе с базой данных.In this lesson, you remove access to data, delete data from a table, delete the table, and then delete the database.

ТребованияRequirements

Чтобы завершить этот учебник, не нужно обладать знаниями языка SQL, но нужно иметь основные понятия о базах данных, таких как таблицы.To complete this tutorial, you do not have to know the SQL language, but you should understand basic database concepts such as tables.С помощью этого учебника будут созданы база данных и пользователь Windows.During this tutorial, you will create a database and create a Windows user.Эти задачи требуют высокого уровня разрешений, так что следует войти в систему в качестве администратора.These tasks require a high level of permissions; therefore, you should log in to the computer as an administrator.

В системе должно быть установлено следующее.Your system must have the following installed:

Преобразование данных

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

Когда мы присваиваем значение одного одного типа столбцу, который хранит данные другого типа, либо выполняем операции, которые вовлекают данные разных типов, SQL Server пытается выполнить преобразование и привести используемое значение к нужному типу. Но не все преобразования SQL Server может выполнить автоматически. SQL Server может выполнять неявные преобразования от типа с меньшим приоритетом к типу с большим приоритетом. Таблица приоритетов (чем выше, тем больший приоритет):

datetime
smalldatetime
float
real
decimal
money
smallmoney
int
smallint
tinyint
bit
nvarchar
nchar
varchar
char

То есть SQL Server автоматически может преобразовать число 100.0 (float) в дату и время (datetime).

В тех случаях, когда необходимо выполнить преобразования от типов с высшим приоритетом к типам с низшим приоритетом, то надо выполнять явное приведение типов. Для этого в T-SQL определены две функции: CONVERT и CAST.

Функция CAST преобразует выражение одного типа к другому. Она имеет следующую форму:

CAST(выражение AS тип_данных)

Для примера возьмем следующие таблицы:

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 );

Например, при выводе информации о заказах преобразует числовое значение и дату в строку:

SELECT Id, CAST(CreatedAt AS nvarchar) + ‘; total: ‘ + CAST(Price * ProductCount AS nvarchar) FROM Orders

Convert

Большую часть преобразований охватывает функция CAST. Если же необходимо какое-то дополнительное форматирование, то можно использовать функцию CONVERT. Она имеет следующую форму:

CONVERT(тип_данных, выражение [, стиль])

Третий необязательный параметр задает стиль форматирования данных.

Этот параметр представляет числовое значение, которое для разных типов данных имеет разную интерпретацию. Например, некоторые значения для форматирования дат и времени:

  • или — формат даты «Mon dd yyyy hh:miAM/PM» (значение по умолчанию)

  • или — формат даты «mm/dd/yyyy»

  • или — формат даты «dd/mm/yyyy»

  • или — формат даты «Mon dd, yyyy hh:miAM/PM»

  • или — формат даты «hh:mi:ss»

  • или — формат даты «mm-dd-yyyy»

  • или — формат даты «hh:mi:ss:mmmm» (24-часовой формат времени)

Некоторые значения для форматирования данных типа money в строку:

  • — в дробной части числа остаются только две цифры (по умолчанию)

  • — в дробной части числа остаются только две цифры, а для разделения разрядов применяется запятая

  • — в дробной части числа остаются только четыре цифры

Например, выведем дату и стоимость заказов с форматированием:

SELECT CONVERT(nvarchar, CreatedAt, 3), CONVERT(nvarchar, Price * ProductCount, 1) FROM Orders

TRY_CONVERT

При использовании функций CAST и CONVERT SQL Server выбрасывает исключение, если данные нельзя привести к определенному типу. Например:

SELECT CONVERT(int, ‘sql’)

Чтобы избежать генерации исключения можно использовать функцию TRY_CONVERT. Ее использование аналогично функции CONVERT за тем исключением, что если выражение не удается преобразовать к нужному типу, то функция возвращает NULL:

SELECT TRY_CONVERT(int, ‘sql’) — NULL SELECT TRY_CONVERT(int, ’22’) — 22

Дополнительные функции

Кроме CAST, CONVERT, TRY_CONVERT есть еще ряд функций, которые могут использоваться для преобразования в ряд типов:

  • STR(float [, length [,decimal]]): преобразует число в строку. Второй параметр указывает на длину строки, а третий — сколько знаков в дробной части числа надо оставлять

  • CHAR(int): преобразует числовой код ASCII в символ. Нередко используется для тех ситуаций, когда необходим символ, который нельзя ввести с клавиатуры

  • ASCII(char): преобразует символ в числовой код ASCII

  • NCHAR(int): преобразует числовой код UNICODE в символ

  • UNICODE(char): преобразует символ в числовой код UNICODE

SELECT STR(123.4567, 6,2) — 123.46 SELECT CHAR(219) — Ы SELECT ASCII(‘Ы’) — 219 SELECT NCHAR(1067) — Ы SELECT UNICODE(‘Ы’) — 1067

НазадСодержаниеВперед

Решение проблемы с ошибкой копирования

Однажды один из моих друзей обратился ко мне за помощью. Он поведал мне, что столкнулся с проблемой при копировании изображений на свой USB-драйв. После копирования более 200 фотографий неожиданно возникла ошибка, после которой стало невозможным скопировать изображение и стало появляться следующее сообщение:


К сожалению, сообщение “Невозможно создать файл или папку” никоим образом не указывало на причину проблемы и не сообщало, где следует искать решение. Мой знакомый был весьма сообразительным, поэтому, прежде чем обратиться ко мне, проверил, что места на диске было предостаточно, но все-таки запустил утилиту Chkdsk для проверки памяти на повреждения. Однако, результатов это не дало, хотя ошибка продолжала неустанно появляться при попытке копирования изображений на флэш-драйв.

Я, со своей стороны, я попросил его запустить Process Monitor, утилиту, которая в реальном времени регистрирует все обращения к файловой системе и реестру, что теоретически позволяет определить причину различных сбоев и ошибок ОС. Затем он отправил мне отчет утилиты в формате PML и я открыл его. После установки фильтра по букве диска, а затем фильтра операций, относящихся непосредственно к копированию информации, я стал прочесывать отчет на наличие ошибок. Собственно, мне не потребовалось много времени, поскольку в последней строке отчета и была ошибка, вызывающая диалог системы:

С целью экономии пространства на рабочем столе компьютера Process Monitor добавляет к отображаемым ошибкам префикс “STATUS”, поэтому действительной системной ошибкой в данном случае являлась STATUS_CANNOT_MAKE. Лично я никогда не слышал и, тем более, не видел подобную ошибку. Кроме того, вместо имени ошибки Process Monitor показывал ее код — 0xc00002ea, поэтому пришлось поискать в файле Ntstatus.h из Windows Device Driver Kit, а затем добавить в Process Monitor функцию, конвертирующую коды ошибок в текст.

Тогда мне удалось отыскать ошибку в исходном коде Windows, но что насчет тех, кто не имеет возможности покопаться в исходном коде ОС. Как им решить данную проблему? Поиск привел меня к старой ветке в новостной группе для разработчиков файловой системы Windows:

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

Проблему удалось-таки решить. Я посоветовал моему приятелю два варианта: 1) создать в корневой директории подпапку и скопировать оставшиеся файлы туда или 2) отформатировать флэш-драйв под файловую систему FAT32, что уберет ограничения по числу файлов/папок в корневой директории диска.

Тем не менее, один вопрос остался нерешенным. Почему диск был форматирован под FAT вместо FAT32? Причина кроется и в производителе USB-драйва и в диалоге форматирования, используемом в Windows.

Я не уверен, но по-моему большинство производителей форматируют выпускаемые накопители под FAT, поскольку данная система гарантированно работает там, где другие файловые системы, как FAT32, не поддерживаются. Например в DOS 6 и Windows 95.

Что до Windows, то я всегда думал, что по умолчанию предлагается форматировать диск под FAT32, но диалог форматирования для одного из моих устройств показал, что это не так:

Мне не удалось найти рекомендации по созданию данного диалога, но быстрый взгляд на исходный код показал, что Windows по умолчанию предлагает форматировать под FAT все не-CD-ROM-подобные извлекаемые устройства размером менее 4GB.
Думаю, что дело об ошибке копирования можно закрыть, но я чувствую себя обязанным сделать два дела: 1) попытаться сделать сообщения об ошибках более понятными и 2) лоббировать изменение формата, используемого по умолчанию для форматирования флэш-драйвов, на FAT32.

Введение в MS SQL Server и T-SQL

Что такое SQL Server и T-SQL

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

SQL Server является одной из наиболее популярных систем управления базами данных (СУБД) в мире. Данная СУБД подходит для самых различных проектов: от небольших приложений до больших высоконагруженных проектов.

SQL Server был создан компанией Microsoft. Первая версия вышла в 1987 году. А текущей версией является версия 16, которая вышла в 2016 году и которая будет использоваться в текущем руководстве.

SQL Server долгое время был исключительно системой управления базами данных для Windows, однако начиная с версии 16 эта система доступна и на Linux.

SQL Server характеризуется такими особенностями как:

  • Производительность.

    SQL Server работает очень быстро.

  • Надежность и безопасность. SQL Server предоставляет шифрование данных.

  • Простота. С данной СУБД относительно легко работать и вести администрирование.

Центральным аспектом в MS SQL Server, как и в любой СУБД, является база данных. База данных представляет хранилище данных, организованных определенным способом. Нередко физически база данных представляет файл на жестком диске, хотя такое соответствие необязательно. Для хранения и администрирования баз данных применяются системы управления базами данных (database management system) или СУБД (DBMS). И как раз MS SQL Server является одной из такой СУБД.

Для организации баз данных MS SQL Server использует реляционную модель. Эта модель баз данных была разработана еще в 1970 году Эдгаром Коддом. А на сегодняшний день она фактически является стандартом для организации баз данных.

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

Для идентификации каждой строки в рамках таблицы применяется первичный ключ (primary key).

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

Через ключи одна таблица может быть связана с другой, то есть между двумя таблицами могут быть организованы связи. А сама таблица может быть представлена в виде отношения («relation»).

Для взаимодействия с базой данных применяется язык SQL (Structured Query Language). Клиент (например, внешняя программа) отправляет запрос на языке SQL посредством специального API. СУБД должным образом интерпретирует и выполняет запрос, а затем посылает клиенту результат выполнения.

Изначально язык SQL был разработан в компании IBM для системы баз данных, которая называлась System/R. При этом сам язык назывался SEQUEL (Structured English Query Language). Хотя в итоге ни база данных, ни сам язык не были впоследствии официально опубликованы, по традиции сам термин SQL нередко произносят как «сиквел».

В 1979 году компания Relational Software Inc. разработала первую систему управления баз данных, которая называлась Oracle и которая использовала язык SQL. В связи с успехом данного продукта компания была переименована в Oracle.

Впоследствии стали появляться другие системы баз данных, которые использовали SQL. В итоге в 1989 году Американский Национальный Институт Стандартов (ANSI) кодифицировал язык и опубликовал его первый стандарт. После этого стандарт периодически обновлялся и дополнялся. Последнее его обновление состоялось в 2011 году. Но несмотря на наличие стандарта нередко производители СУБД используют свои собственные реализации языка SQL, которые немного отличаются друг от друга.

Выделяются две разновидности языка SQL: PL-SQL и T-SQL. PL-SQL используется в таких СУБД как Oracle и MySQL. T-SQL (Transact-SQL) применяется в SQL Server. Собственно поэтому в рамках текущего руководства будет рассматриваться именно T-SQL.

В зависимости от задачи, которую выполняет команда T-SQL, он может принадлежать к одному из следующих типов:

  • DDL (Data Definition Language / Язык определения данных). К этому типу относятся различные команды, которые создают базу данных, таблицы, индексы, хранимые процедуры и т.д. В общем определяют данные.

    В частности, к этому типу мы можем отнести следующие команды:

    • CREATE: создает объекты базы данных (саму базу даных, таблицы, индексы и т.д.)

    • ALTER: изменяет объекты базы данных

    • DROP: удаляет объекты базы данных

    • TRUNCATE: удаляет все данные из таблиц

  • DML (Data Manipulation Language / Язык манипуляции данными). К этому типу относят команды на выбору данных, их обновление, добавление, удаление — в общем все те команды, с помощью которыми мы можем управлять данными.

    К этому типу относятся следующие команды:

    • SELECT: извлекает данные из БД

    • UPDATE: обновляет данные

    • INSERT: добавляет новые данные

    • DELETE: удаляет данные

  • DCL (Data Control Language / Язык управления доступа к данным). К этому типу относят команды, которые управляют правами по доступу к данным. В частности, это следующие команды:

    • GRANT: предоставляет права для доступа к данным

    • REVOKE: отзывает права на доступ к данным

НазадСодержаниеВперед

Курсоры (Transact-SQL)Cursors (Transact-SQL)

  • Время чтения: 2 мин
  • Соавторы

Инструкции MicrosoftMicrosoftSQL ServerSQL Server создают полный результирующий набор, но бывают случаи, когда результаты удобнее обрабатывать построчно.MicrosoftMicrosoftSQL ServerSQL Server statements produce a complete result set, but there are times when the results are best processed one row at a time.Открытие курсора на результирующем наборе делает возможной его построчную обработку.Opening a cursor on a result set allows processing the result set one row at a time.Можно присвоить курсор переменной или параметру с типом данных cursor.You can assign a cursor to a variable or parameter with a cursor data type.

Операции с курсором поддерживаются в таких инструкциях:Cursor operations are supported on these statements:

CLOSECLOSE

CREATE PROCEDURECREATE PROCEDURE

DEALLOCATEDEALLOCATE

DECLARE CURSORDECLARE CURSOR

DECLARE @local_variableDECLARE @local_variable

DELETEDELETE

FETCHFETCH

OPENOPEN

UPDATEUPDATE

SETSET

Следующие системные функции и системные хранимые процедуры также поддерживают курсоры:These system functions and system stored procedures also support cursors:

@@CURSOR_ROWS@@CURSOR_ROWS

CURSOR_STATUSCURSOR_STATUS

@@FETCH_STATUS@@FETCH_STATUS

sp_cursor_listsp_cursor_list

sp_describe_cursorsp_describe_cursor

sp_describe_cursor_columnssp_describe_cursor_columns

sp_describe_cursor_tablessp_describe_cursor_tables

См. также:See Also

КурсорыCursors

Добавить комментарий

Закрыть меню