Create sql server table: Создание таблиц в Microsoft SQL Server (CREATE TABLE) – подробная инструкция | Info-Comp.ru
Transact-SQL | Создание таблиц
Мы запустили ТГ-канал по урокам C#
Toggle navigation
Professor Web
- C# 5.0 и .NET 4.5
- Руководство C# — Часть 1
- Руководство C# — Часть 2
- Основы .NET
- Сборки .NET
- Потоки и файлы
- Работа с сетью
- Оптимизация приложений
- WPF
- Основа WPF
- Элементы управления WPF
- Привязка и стили
- Графика и анимация
- Шаблоны WPF
- Периферия WPF
- Темы WPF
- Dark Blue UI
- Dark Orange UI
- Silverlight 5
- Работа с БД
- ADO. NET
- Entity Framework 6
- SQL Server 2012
- Оконные функции
- LINQ
- LINQ to Objects
- LINQ to XML
- LINQ to DataSet и SQL
- LINQ to Entities
- Parallel LINQ
- ASP.NET
- Основы ASP.NET
- Веб-сайты
- Безопасность
- Интернет магазин
- ASP.NET Web Forms 4.5
- ASP.NET MVC 5
- Аутентификация
- Windows 8/10
- WinRT — основы
- WinRT — расширения
- Программы
- Expression Blend 4
- Visual Studio
Создание и удаление таблиц в MS SQL Server
Создание и удаление таблиц в ms sql server
Все данные в БД sql server хранятся в таблицах.
Таблицы состоят из колонок, объединяющих значения одного типа, и строк — записей в таблице. В одной БД может быть до 2 миллиардов таблиц, в таблице — 1024 колонки, в одной строке (записи) — 8060 байтов.
sql server поддерживает следующие типы данных:
Тип данных Обозначение Размер, байт
Бинарные данные binary
varbinary[(n)] 1-8000
Символы char[(n)]
varchar[(n)] 1-8000
( до 8000 символов)
Символы unicode nchar[(n)]
nvarchar[(n)] 1-8000
(до 4000 символов)
Дата и время datetime 8
smalldatetime 4
Точные числа decimal[(p[,s])]
numeric[(p[,s])] 5-17
Приблизительные числа float[(n)] real 4-8 4
Глобальный идентификатор uniqueidentifier 16
Целые числа int smallint, tinyint 4 2, 1
Денежки money, smallmoney 8, 4
Специальные bit, cursor,
sysname, timestamp 1, 0-8
Текст и изображение text, image 0-2 Гб
Текст unicode ntext 0-2 Гб
Таблицы можно создавать с помощью оператора create table языка transact-sql, а также с помощью enterprise manager. Рассмотрим сначала как это делается с помощью transact-sql.
Содание таблиц с помощью create table
Для создания таблиц применяется оператор create table.
Вот как выглядит упрощенный синтаксис этого оператора:
create table table_name
(column_name data_type [null | not null]
[,…n])
Например:
create table member ( member_no int not null, lastname char(50) not null, firstname char(50) not null, photo image null )
Этим оператором создается таблица member, состоящая из четырех колонок:
member_no — имеет тип int, значения null не допускаются
lastname — имеет тип char(50) — 50 символов, значения null не допускаются
firstname — аналогично lastname
photo — имеет тип image (изображение), допускается значение null
Примечание
null — специальное обозначение того, что элемент данных не имеет значения. В описании типа колонки указывается, что элементы данных могут быть неинициализированы. При указании not null — «пустые» значения не допускаются. Если при вставке записи пропустить значение для такой колонки, вставка не произойдет, и sql server сгенерирует ошибку.
Попробуйте выполнить эту команду. Запустите query analyzer. Соединитесь с Вашим сервером. Из списка БД выберите sqlstep. Скопируйте в окно команд команду создания таблицы и выполните ее. (Если не забыли, надо нажать f5 или ctrl-e).
Чтобы точно удостовериться, в том, что таблица была создана, наберите команду:
sp_help member
Выделите ее (как в обычном редакторе) и снова нажмите f5. В окно результатов будет выведена информация о таблице member.
На заметку!
sp_help — системная процедура, которая возвращает информацию об объектах БД (таблицах, хранимых процедурах и пр.).
Формат вызова таков:
sp_help <имя таблицы>
Удалить таблицу проще простого. Там же, в запросчике (так у нас называют query analyzer), наберите:
Выделите эту строку и нажмите f5. Таблица будет удалена, о чем Вас и уведомят. В нашем случае эта процедура проста. На самом деле в большой БД просто так удалить таблицу не получится, поскольку она будет связана с другими таблицами, и для удаления потребуется эти связи оборвать. Как это сделать см. следующие шаги.
Как создать таблицу с помощью sql server enterprise manager
Раскройте последовательно: sql server group, <Ваш sql server>, databases. Выберите БД (sqlstepbystep, я думаю :), нажмите правую кнопку мыши и выберите в контекстном меню пункт «new», а затем пункт «table…». Первым делом Вас спросят имя таблицы. Введите его и нажмите enter. На экране появится окно, в котором можно вводить:
имена колонок, тип, длину, размерность, точность (эти три колонки блокируются в зависимости от типа), флаг разрешения null, значение по умолчанию. Последние три колонки, пока не представляют интереса.
Введите названия колонок, их тип и длину также как в примере выше. Нажмите на иконку с дискетой для сохранения таблицы и можете закрыть окно. Раскройте вашу БД, щелкните на категории «tables» и в списке таблиц увидите только что введенную таблицу. Для ее удаления выделите ее в списке, нажмите правую кнопку мыши и в контекстном меню выберите «delete». Таблица будет удалена.
Мы изучили как создаются и удалются таблицы. Следующий наш шаг — создание полноценной БД, на примере которой мы будем изучать:
что такое реляционная целостность БД и как она обеспечивается в sql server
как модифицировать данные в таблицах (операторы insert, update, delete, select)
как использовать хранимые процедуры и триггеры
Как создать таблицу в базе данных MS SQL Server 2008
В предыдущей статье показано как создавать новую базу данных в MS SQL Server. Информация в базе данных храниться в таблицах, которые являются отображением некоторых логических общностей. В нашей учебной базе, которая будет моделировать работу некой коммерческой фирмы по продаже товаров, как минимум, будут необходимы пять таблиц:
Sotrudniki — в этой таблице будет храниться информация о сотрудниках — Справочник сотрудников фирмы;
Tovary — будет содержать информацию о товарах — Справочник товаров;
Zakazy — сюда будем заносить информацию о сделанных заказах — оперативная таблица о сделанных заказах;
Zakazchiki — будет хранить информацию о заказчиках — Справочник заказчиков;
Postavschiki — хранит информацию о поставщиках товаров — Справочник поставщиков
Приблизительная номенклатура таблиц ясна. Конкретную структуру таблиц с необходимыми полями будем задавать во время их создания. Сейчас аккурат и займёмся этим моментом. Опять запускаем SQL Server Management Studio, выбираем БД, отмечаем ветку Таблицы и по правой кнопке нажимаем по пункту меню «Создать таблицу»:Для начала попробуем создать таблицу, в которой будем хранить данные о сотрудниках. Пусть она будет иметь три поля — SotrID (идентификатор сотрудника), FIO (Ф.И.О сотрудника) и Zarplata (Зарплата). Для выполнения этой задачи в колонках Имя столбца и Тип данных заносим соответствующие реквизиты полей таблицы:
Для сохранения введённой информации о структуре таблицы щелкаем правой кнопкой по ярлыку с именем таблицы по умолчанию:
В следующей форме задаём имя таблицы:
После обновления, в «Обозревателе объектов» можно увидеть в списке таблиц только что созданную таблицу:
Первую таблицу в MS SQL Server успешно создали. (пока не обращайте внимание на префикс dbo в имени таблицы. Он означает владельца таблицы — database owner).
Естественно, если мы что-то забыли, всегда можно вставить в структуру таблицы новый столбец. Для этого становимся на нужную таблицу, жмём на правую кнопку мыши и выбираем в контекстном меню «Создать столбец«:
Далее становимся на строке столбца, перед которым желаем вставить новый и по правой кнопке нажимаем по «Вставить столбец«:
Вконтакте
Одноклассники
Мой мир
SQL команды — основной перечень необходимый новичку и примеры
SQL команды — база, которую необходимо знать при работе с языком SQL. Язык SQL или Structured Query Language (язык структурированных запросов) предназначен для управления данными в системе реляционных баз данных (RDBMS). В этой статье будет рассказано о часто используемых командах SQL, с которыми должен быть знаком каждый программист.
Обратите внимание, что в некоторых системах баз данных требуется указывать точку с запятой в конце каждого оператора. Точка с запятой является стандартным указателем на конец каждого оператора в SQL. В примерах используется MySQL, поэтому точка с запятой требуется.
Фактически, SQL является набором стандартов, для написания запросов к БД. Последняя действующая редакция стандартов языка SQL — ISO/IEC 9075:2016.
Основываясь на указанных стандартах языка SQL, ряд организаций выпустили свои, расширенные версии стандартов указанного языка. Подобные версии иногда называют диалектами SQL.
Варианты спецификаций SQL разрабатываются компаниями и сообществами и служат, соответственно, для работы с разными СУБД (Системами Управления Базами Данных) – системами программ, заточенных под работу с продуктами из своей инфраструктуры.
Наиболее применяемые на сегодня СУБД, использующие свои стандарты (расширения) SQL:
- MySQL – СУБД, принадлежащая компании Oracle;
- PostgreSQL – свободная СУБД, поддерживаемая и развиваемая сообществом;
- Microsoft SQL Server – СУБД, принадлежащая компании Microsoft. Применяет диалект Transact-SQL (T-SQL).
Благодаря тому, что диалекты SQL что создаются, специфицируются и используются разными организациями, имеют как общие черты, так и ряд отличий в возможностях расширений.
Читайте так же: «ТОП 5 языков программирования для новичков»
Общими чертами диалектов являются основные конструкции, применимые практически без отличий во многих реляционных БД. Основные отличия диалектов состоят в различиях использованных типов данных, количеством, реализацией и детальными возможностями команд. Разные диалекты применяют как разные наборы зарезервированных слов, так и разные наборы команд.
SQL запосы
Коснемся классификации SQL запросов.
Выделяют такие виды SQL запросов:
- DDL (Data Definition Language) — язык определения данных. Задачей DDL запросов является создание БД и описание ее структуры. Запросами такого вида устанавливаются правила того, в каком виде различные данные будут размещаться в БД.
- DML (Data Manipulation Language) — язык манипулирования данными. В число запросов этого типа входят различные команды, используя которые непосредственно производятся некоторые манипуляции с данными. DML-запросы нужны для добавления изменений в уже внесенные данные, для получения данных из БД, для их сохранения, для обновления различных записей и для их удаления из БД. В число элементов DML-обращений входит основная часть SQL операторов.
- DCL (Data Control Language) — язык управления данными. Включает в себя запросы и команды, касающиеся разрешений, прав и других настроек СУБД.
- TCL (Transaction Control Language) — язык управления транзакциями. Конструкции такого типа применяют чтобы управлять изменениями, которые производятся с использованием DML запросов. Конструкции TCL позволяют нам производить объединение DML запросов в наборы транзакций.
Основные типы SQL запросов по их видам
Создание и настройка базы данных
Нам нужна будет для примеров БД MS SQL Server 2017 и MS SQL Server Management Studio 2017.
Хранимые функции Transact-SQL
С SQL Server вы можете создавать ваши собственные функции, добавляющие и расширяющие функции, предоставляемые системой. Функции могут получать 0 или более параметров и возвращать скалярное значение или таблицу. Входные параметры могут быть любого типа, исключая timestamp, cursor, table.
Сервер SQL поддерживает три типа функций определенных пользователем:
- Скалярные функции – похожи на встроенные функции;
- Функция, возвращающая таблицу — возвращает результат единичного оператора SELECT. Он похож на объект просмотра, но имеет большую эластичность благодаря использованию параметров, и расширяет возможности индексированного объекта просмотра;
- Многооператорная функция — возвращает таблицу созданную одним или несколькими операторами Transact-SQL, чем напоминает хранимые процедуры. В отличие от процедур, на такие функции можно ссылаться в WHERE как на объект просмотра.
1. Создание хранимой функции
Создание функций очень похоже на создание процедур и объектов просмотра. эедаром мы рассматриваем все эти темы в одной главе. Для создания функции используется оператор CREATE FUNCTION. В зависимости от типа, Объявление будет отличаться. э ассмотрим все три типа объявления.
Скалярная функция:
CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type [ WITH [ [,] ...n] ] [ AS ] BEGIN function_body RETURN scalar_expression END
Функция, возвращающая таблицу:
CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS TABLE [ WITH [ [,] ...n ] ] [ AS ] RETURN [ ( ] select-stmt [ ) ]
Многооператорные функции:
CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS @return_variable TABLE [ WITH [ [,] ...n ] ] [ AS ] BEGIN function_body RETURN END ::= { ENCRYPTION | SCHEMABINDING } :: = ( { column_definition | table_constraint } [ ,...n ] )
2. Скалярные функции в Transact-SQL
Давайте для примера создадим функцию, которая будет возвращать скалярное значение. эапример, результат перемножение цены на количество указанного товара. Товар будет идентифицироваться по названию и дате, ведь мы договорились, что сочетание этих полей дает уникальность. эо будьте осторожны, при тестировании запроса, если в разделе 3.2.8 вы выполнили запрос на изменение данных и создали дубликаты покупок за 1.1.2005-го года.
Итак, посмотрим сначала на код создание скалярной функции:
CREATE FUNCTION GetSumm (@name varchar(50), @date datetime) RETURNS numeric(10,2) BEGIN DECLARE @Summ numeric(10,2) SELECT @Summ = Цена*Количество FROM Товары WHERE [эазвание товара]=@name AND Дата=@date; RETURN @Summ END
После оператора CREATE FUNCTION мы указываем имя функции. Далее, в скобках идут параметры, которые необходимо передать. Да, параметры должны передаваться через запятую в круглых скобках. В этом объявление отличается от процедур и эту разницу необходимо помнить.
Далее указывается ключевое слово RETURNS, за которым идет описание типа возвращаемого значения. Для скалярной функции это могут быть любые типы (строки, числа, даты и т.д.).
Код, который должна выполнять функция пишется между ключевыми словами BEGIN (начало) и END (конец). В коде можно использовать любые операторы Transact-SQL, которые мы изучали ранее. Итак, объявление нашей функции в упрощенном виде можно описать следующим образом:
CREATE FUNCTION GetSumm (@name varchar(50), @date datetime) RETURNS numeric(10,2) BEGIN -- Код функции END
Между ключевыми словами BEGIN и END у нас выполняется следующий код:
-- Объявление переменной DECLARE @Summ numeric(10,2) -- Выполнение запроса на выборку суммы SELECT @Summ = Цена*Количество FROM Товары WHERE [эазвание товара]=@name AND Дата=@date; -- Возврат результата RETURN @Summ
В первой строке объявляется переменная @Summ. Она нужна для хранения промежуточного результата расчетов. Далее выполняется запрос SELECT, в котором происходит поиск строки по дате и названию товара в таблице товаров. В найденной строке перемножаются поля цены и количества, и результат записывается в переменную @Summ.
Обратите внимание, что в конце запроса стоит знак точки с запятой. Каждый запрос должен заканчиваться этим символом, но в большинстве примеров мы этим пренебрегали, но в функции отсутствие символа «;» может привести к ошибке.
В последней строке возвращаем результат. Для этого нужно написать ключевое слово RETURN, после которого пишется возвращаемое значение или переменная. В данном случае, возвращаться будет содержимое переменной @Summ.
Так как функция скалярная, то и возвращаемое значение должно быть скалярным и при этом соответствовать типу, описанному после ключевого слова RETURNS.
3. Использование функций
Как выполнить такую функцию? Да также, как и многие другие системные функции (например, GETDATE()). эапример, следующий пример использует функцию в операторе SELECT:
SELECT dbo.GetSumm('Картофель', '03.03.2005')
В этом примере, оператор SELECT возвращает результат выполнения функции GetSumm. Функция принадлежит пользователю dbo, поэтому перед именем я указал владельца. После имени в скобках должны быть перечислены параметры в том же порядке, что и при объявлении функции. В данном примере я запрашиваю затраты на картофель, купленный 3.3.2005.
Выполните следующий запрос и убедитесь, что он вернул тот же результат, что и созданная нами функция:
SELECT Цена*Количество FROM Товары WHERE [эазвание товара]='Картофель' AND Дата='03.03.2005'
Функции можно использовать не только в операторе SELECT, но и напрямую, присваивая значение переменной. эапример:
DECLARE @Summ numeric(10,2) SET @Summ=dbo.GetSumm('Картофель', '03.03.2005') PRINT @Summ
В этом примере мы объявили переменную @Summ типа numeric(10,2). Именно такой тип возвращает функция. В следующей строке переменной присваивается результат выполнения Summ, с помощью SET.
Давайте посмотрим, что произойдет, если передать функции такие параметры, при которых запрос функции вернет более одной строки. В нашей таблице товаров сочетание даты и название не дает уникальности, потому что мы ее нарушили. Первичного ключа в таблице также нет, и среди товаров у меня есть четыре строки, которые имеют свои точные копии. это нарушает правило уникальности строк в реляционных базах, но очень наглядно показывает, что в реальной жизни нарушать его нельзя.
Итак, в моей таблице есть две покупки хлеба 1.1.2005-го числа. Попробую запросить у функцию сумму:
SELECT dbo.GetSumm('Хлеб', '01.01.2005')
э езультатом будет только одно число, хотя строки две. э какую строку из двух вернул сервер? эикто точно сказать не может, потому что они обе одинаковые и без единого различия. Поэтому сервер скорей всего вернул первую из строк.
4. Функция, возвращающая таблицу
В следующем примере мы создаем функцию, которая будет возвращать в качестве результата таблицу. В качестве примера, создадим функцию, которая будет возвращать таблицу товаров, и для каждой строки рассчитаем произведение колонок количества и цены:
CREATE FUNCTION GetPrice() RETURNS TABLE AS RETURN ( SELECT Дата, [эазвание товара], Цена, Количество, Цена*Количество AS Сумма FROM Товары )
эачало функции такое же, как у скалярной – указываем оператор CREATE FUNCTION и имя функции. Я специально создал эту функцию без параметров, чтобы вы увидели, как это делается. эе смотря на то, что параметров нет, после имени должны идти круглые скобки, в которых не надо ничего писать. Если не указать скобок, то сервер вернет ошибку и функция не будет создана.
э азница есть и в секции RETURNS, после которой указывается тип TABLE, что говорит о необходимости вернуть таблицу. После этого идет ключевое слово AS и RETURN, после которого должно идти возвращаемое значение. Для функции данного типа в секции RETURN нужно в скобках указать запрос, результат которого и будет возвращаться функцией.
Когда пишете запрос, то все его поля должны содержать имена. Если одно из полей не имеет имени, то результатом выполнения оператора CREATE FUNCTION будет ошибка. В нашем примере последнее поле является результатом перемножения полей «Цена» и «Количество», а такие поля не имеют имени, поэтому мы его задаем с помощью ключевого слова AS.
Посмотрим, как можно использовать такую функцию с помощью оператора SELECT:
SELECT * FROM GetPrice()
Так как мы используем простой оператор SELECT, то мы можем и ограничивать вывод определенными строками, с помощью ограничений в секции WHERE. эапример, в следующем примере выбираем из результата функции только те строки, в которых поле «Количество» содержит значение 1:
SELECT * FROM GetPrice() WHERE Количество=1
Функция возвращает в качестве результата таблице, которую вы можете использовать как любую другую таблицу базы данных. Давайте создадим пример в котором можно будет увидеть использование функции в связи с таблицами. Для начала создадим функцию, которая будет возвращать идентификатор работников таблицы tbPeoples и объединенные в одно поле ФИО:
CREATE FUNCTION GetPeoples() RETURNS TABLE AS RETURN ( SELECT idPeoples, vcFamil+' '+vcName+' '+vcSurName AS FIO FROM tbPeoples )
Функция возвращает нам идентификатор строки, с помощью которого мы легко можем связать результат с таблицей телефонов. Попробуем сделать это с помощью простого SQL запроса:
SELECT * FROM GetPeoples() p, tbPhoneNumbers pn WHERE p.idPeoples=pn.idPeoples
Как видите, функции, возвращающие таблицы очень удобны. Они больше, чем процедуры похожи на объекты просмотра, но при этом позволяют принимать параметры. Таким образом, можно сделать так, чтобы сама функция возвращала нам только то, что нужно. Вьюшки такого не могут делать по определению. Чтобы получить нужные данные, вьюшка должна выполнить свой SELECT запрос, а потом уже во внешнем запросе мы пишем еще один оператор SELECT, с помощью которого ограничивается вывод до необходимого. Таким образом, выполняется два запроса SELECT, что для большой таблицы достаточно накладно. Функция же может сразу вернуть только то, что нужно.
э ассмотрим пример, функция GetPeoples у нас возвращает все строки таблицы. Чтобы получить только нужную фамилию, нужно писать запрос типа:
SELECT * FROM GetPeoples() WHERE FIO LIKE 'ПОЧЕЧКИэ%'
В этом случае будут выполняться два запроса: этот и еще один внутри функции. эо если передавать фамилию в качестве параметра в функцию и там сделать секцию WHERE, то можно обойтись и одним запросом SELECT:
CREATE FUNCTION GetPeoples1(@Famil varchar(50)) RETURNS TABLE AS RETURN ( SELECT idPeoples, vcFamil+' '+vcName+' '+vcSurName AS FIO FROM tbPeoples WHERE vcFamil=@Famil )
5. Многооператорная функция возвращающая таблицу
Все функции, созданные в разделе 3.3.5 могут возвращать таблицу, сгенерированную только одним оператором SQL. э как же тогда сделать возможность выполнять несколько операций? эапример, вы можете захотеть выполнять дополнительные проверки входных параметров для обеспечения безопасности. Проверки лишними не бывает, особенно входных данных и особенно, если эти входные данные указываются пользователем.
Следующий пример показывает, как создать функцию, которая может вернуть в качестве результата таблицу, и при этом, в теле функции могут выполняться несколько операторов:
CREATE FUNCTION имя (параметры) RETURNS имя_переменной TABLE (описание вида таблицы, в которой будет представлен результат) AS BEGIN Выполнение любого количества операций RETURN END
это упрощенный вид создания процедуры. Более полный вид мы рассматривали в начале главы, а сейчас я упростил объявление, чтобы проще было его разбирать.
Объявление больше похоже на создание скалярных функций. Первая строка без изменений. В секции RETURNS объявляется переменная, которая имеет тип TABLE. После этого, в скобках нужно описать поля результирующей таблицы. После ключевого слова AS идtт пара операторов BEGIN и END, между которыми может выполняться какое угодно количество операций. Выполнение операций заканчивается ключевым словом RETURN.
Вот тут есть одно отличие от скалярных функций – после RETURN мы указывали имя переменной, значение которой должно стать результатом. В данном случае ничего указывать не надо. Мы уже объявили переменную в секции RETURNS и описали формат этой переменной. В теле функции мы можем и должны наполнить эту переменную значениями и именно это попадет в результат.
Теперь посмотрим на пример создания функции:
CREATE FUNCTION getFIO () RETURNS @ret TABLE (idPeoples int primary key, vcFIO varchar(100)) AS BEGIN INSERT @ret SELECT idPeoples, vcFamil+' '+vcName+' '+vcSurName FROM tbPeoples; RETURN END
В данном примере в качестве результата объявлена переменная @ret, которая является таблицей из двух полей «idPeoples» типа int и «vcFIO» типа varchar длинной в 50 символов. В теле функции в эту таблицу записываются значения из таблицы tbPeoples и выполняется оператор RETURN, завершающий выполнение функции.
В использовании, такая функция ничем не отличается от рассмотренных ранее. эапример, следующий запрос выбирает все данные, которые возвращает функция:
SELECT * FROM GetFIO()
6. Опции функций
При создании функций могут использоваться следующие опции SCHEMABINDING (привязать к схеме) и/или ENCRYPTION (шифровать текст функции). Если вторая опция нам уже известна по вьюшкам и процедурам (позволяет шифровать исходный код функции в системных таблицах), то вторая встречается впервые, но при этом предоставляет удобное средство защиты данных.
Если функция создана с опцией SCHEMABINDING, то объекты базы данных, на которые ссылается функция, не могут быть изменены (с использованием оператора ALTER) или удалены (с помощью оператора DROP). эапример, следующая функция использует таблицу tbPeoples и при этом используется опция SCHEMABINDING:
CREATE FUNCTION GetPeoples2(@Famil varchar(50)) RETURNS TABLE WITH SCHEMABINDING AS RETURN ( SELECT idPeoples, vcFamil+' '+vcName+' '+vcSurName AS FIO FROM dbo.tbPeoples WHERE vcFamil=@Famil )
Функция может быть связанной со схемой, только если следующие ограничения истины:
- все функции объявленные пользователем и просмотрщики на которые ссылается функция, также связаны со схемой с помощью опции SCHEMABINDING;
- объекты, на которые ссылается функция, должны использовать имя из двух частей именования: owner.objectname. При создании функции GetPeoples2 ссылка на таблицу указана именно в таком формате – dbo.tbPeoples;
- Функция и объекты должны быть расположены в одной базе данных;
- Пользователь, который создает функцию, имеет право доступа ко всем объектам, на которые ссылается функция.
Создайте функцию и попробуйте после этого удалить таблицу tbPeoples.
DROP TABLE tbPeoples
В ответ на это сервер выдаст сообщение с ошибкой о том, что объект не может быть удален, из-за присутствия внешнего ключа. Даже если избавиться от ключа, удаление будет невозможно, потому что на таблицу ссылается функция, привязанная к схеме.
Чтобы увидеть сообщение без удаления ключа, давайте добавим к таблице колонку, а потом попробуем ее удалить:
-- Добавим колонку ALTER TABLE dbo.tbPeoples ADD vcTemp VARCHAR(30) NOT NULL default '' -- Попробуем ее удалить ALTER TABLE dbo.tbPeoples DROP COLUMN vcTemp
Создание пройдет успешно, а вот во время удаления произойдет ошибка, с сообщением о том, что существует ограничение, которое зависит от колонки. Мы же не создавали никаких ограничений, а просто добавили колонку и попытались ее удалить. Ограничение уже давно существует, но не на отдельную колонку, а на все колонки таблицы и это ограничение создано функцией GetPeoples2, которая связана со схемой.
7. Изменение функций
Вы можете изменять функцию с помощью оператора ALTER FUNCTION. Общий вид для каждого варианта функции отличается. Давайте рассмотрим каждый из них.
1. Общий вид команды изменения скалярной функции:
ALTER FUNCTION [ owner_name. ] function_name ( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type [ WITH [,...n] ] [ AS ] BEGIN function_body RETURN scalar_expression END
2. Общий вид изменения функции, возвращающей таблицу:
ALTER FUNCTION [ owner_name. ] function_name ( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS TABLE [ WITH [ ,...n ] ] [ AS ] RETURN [ ( ] select-stmt [ ) ]
3. Общий вид команды изменения функции с множеством операторов, возвращающей таблицу.
ALTER FUNCTION [ owner_name. ] function_name ( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS @return_variable TABLE [ WITH [ ,...n ] ] [ AS ] BEGIN function_body RETURN END ::= { ENCRYPTION | SCHEMABINDING } :: = ( { column_definition | table_constraint } [ ,...n ] )
Следующий пример показывает упрощенный вариант команды, изменяющей функцию:
ALTER FUNCTION dbo.tbPeoples AS -- эовое тело функции
8. Удаление функций
Если вы внимательно читали об объектах просмотра и функциях, то не трудно догадаться, как можно удалить функцию. Конечно же для этого используется оператор DROP FUNCTION:
DROP FUNCTION dbo.GetPeoples2
SQL Server CREATE TABLE Заявление
В этом руководстве по SQL объясняется, как использовать оператор CREATE TABLE в SQL Server. Это руководство является первой частью из двух сообщений, описывающих операторы DDL (языка определения данных) в SQL Server.
Операторы DDL — это подмножество операторов SQL, используемых для создания, изменения или удаления структур базы данных. В этом посте вы узнаете, как создавать и удалять таблицы.
Это руководство позволяет вам ознакомиться со следующими темами:
В следующем посте будет описано, как использовать оператор SQL Server ALTER TABLE.
SQL Server CREATE TABLE Заявление
Оператор CREATE TABLE SQL Server используется для создания новых таблиц в базе данных.
Типы данных
Тип колонки | Описание | Пример |
VARCHAR ( размер ) | Строковый столбец. Значение в скобках указывает максимальный размер каждого поля в столбце (в символах) | VARCHAR (3) → «ABC» VARCHAR (3) → «AB» |
Десятичный (p, s) | Числовой столбец. P recision — количество цифр, S cale — сколько цифр находится после десятичной точки | ДЕСЯТИЧНАЯ (5,2) → 476,29 ДЕСЯТИЧНЫЙ (5,2) → 6,29 |
ДАТА | Столбец формата даты | «ГГГГ-ММ-ДД» |
Значение по умолчанию для SQL Server
Столбцу можно присвоить значение по умолчанию с помощью ключевого слова DEFAULT. Ключевое слово DEFAULT предоставляет значение по умолчанию для столбца, когда инструкция SQL Server INSERT INTO не предоставляет конкретного значения.Значение по умолчанию может быть буквальным значением, выражением или функцией SQL, например GETDATE ().
Чтобы определить значение по умолчанию, используйте этот синтаксис:
ПО УМОЛЧАНИЮ default_value
Например:
СОЗДАТЬ ТАБЛИЦУ demo_tbl ( зарплата DECIMAL (8,2) ПО УМОЛЧАНИЮ 9500, rental_date ДАТА ПО УМОЛЧАНИЮ ’27.01.2011’, дата рождения ДАТА ПО УМОЛЧАНИЮ GETDATE () ) ВСТАВИТЬ demo_tbl ЗНАЧЕНИЯ (ПО УМОЛЧАНИЮ, ПО УМОЛЧАНИЮ, ПО УМОЛЧАНИЮ) ВЫБРАТЬ * ОТ demo_tbl зарплата наем_дата дата рождения ------ --------- ---------- 9500 2011-01-27 2014-01-13
Создание ограничений SQL Server
Ограничения применяют правила к данным в таблице всякий раз, когда строка вставляется, удаляется или обновляется.Ограничения могут быть определены на уровне столбца или таблицы.
Определение ограничений на уровне столбца
Ограничение на уровне столбца:
- Создается как часть определения столбца
- Всегда относится к одному столбцу
- Ограничение на уровне столбца имеет следующую структуру:
CONSTRAINT имя_ограничения тип_ограничения
- Constraint_type — тип ограничения, которое должно применяться к столбцу (например, Unique или Not Null)
- Constraint_name — хотя и не обязательно, всегда рекомендуется давать ограничению имя, чтобы вы могли легко его идентифицировать.
Многие разработчики баз данных обычно используют следующее соглашение об именах:
<имя таблицы> _ <имя_столбца> _ <аббревиатура ограничения>
Например:
Первичный ключ (PK)
В SQL Server ограничение первичного ключа — это столбец (или набор столбцов), который однозначно идентифицирует каждую строку в таблице, это ограничение обеспечивает уникальность и гарантирует, что ни один столбец, являющийся частью первичного ключа, не может содержать значение NULL.Для каждой таблицы можно создать только один первичный ключ.
Синтаксис определения ограничения первичного ключа следующий:
имя_столбца тип_данных_столбца [значение ПО УМОЛЧАНИЮ] [КОНСТРАЙН имя_ограничения] ПЕРВИЧНЫЙ КЛЮЧ,
Например:
СОЗДАТЬ ТАБЛИЦЫ emps (emp_id decimal (3) CONSTRAINT emps_empid_pk PRIMARY KEY, emp_name varchar (25))
Обратите внимание — квадратные скобки в этой демонстрации (и в последующих) указывают, что заключенное в них необязательно, квадратные скобки не являются частью оператора CREATE TABLE.
Не ноль (NN)
В SQL Server ограничение Not Null гарантирует, что столбец не содержит значений NULL. Синтаксис для определения ограничения Not Null следующий:
имя_столбца тип_данных_столбца [значение ПО УМОЛЧАНИЮ] [CONSTRAINT имя_ограничения] НЕ NULL,
Например:
СОЗДАТЬ ТАБЛИЦЫ emps (emp_id decimal (3) CONSTRAINT emps_empid_pk PRIMARY KEY, emp_name varchar (25) CONSTRAINT emps_emnm_nn NOT NULL)
Это ограничение можно определить только на уровне столбца
УНИКАЛЬНЫЙ (UQ)
В SQL Server ограничение уникальности требует, чтобы каждое значение в столбце (или наборе столбцов) было уникальным.Синтаксис для определения ограничения UNIQUE следующий:
имя_столбца тип_данных_столбца [значение ПО УМОЛЧАНИЮ] [имя_ограничения CONSTRAINT] UNIQUE,
Например:
СОЗДАТЬ ТАБЛИЦЫ emps (emp_id decimal (3) CONSTRAINT emps_empid_pk PRIMARY KEY, emp_name varchar (25) CONSTRAINT emps_emnm_nn NOT NULL, emp_phone varchar (25) ОГРАНИЧЕНИЕ emps_empn_uq УНИКАЛЬНО)
ПРОВЕРКА (СК)
В SQL Server ограничение Check определяет условие, которому должна удовлетворять каждая строка.Синтаксис для определения ограничения проверки следующий:
имя_столбца тип_данных_столбца [значение ПО УМОЛЧАНИЮ] [имя_ограничения CONSTRAINT] ПРОВЕРКА (условие),
- Условие, записанное в CHECK, очень похоже по своей структуре на каждое из условий, записанных в операторе WHERE.
- Условие в части CHECK не должно включать:
- Значения, возвращаемые в результате использования SEQUENCES
- Такие функции, как GETDATE ()
- Подзапросы
Например:
СОЗДАТЬ ТАБЛИЦЫ emps (emp_id decimal (3) CONSTRAINT emps_empid_pk PRIMARY KEY, emp_name varchar (25) CONSTRAINT emps_emnm_nn NOT NULL, emp_phone varchar (25) ОГРАНИЧЕНИЕ emps_empn_uq УНИКАЛЬНО, emp_mail varchar (25) CONSTRAINT emps_emml_ck CHECK (emp_mail LIKE _% @%.% '))
Другой пример:
СОЗДАТЬ ТАБЛИЦЫ emps (emp_id decimal (3) CONSTRAINT emps_empid_pk PRIMARY KEY, emp_name varchar (25) CONSTRAINT emps_emnm_nn NOT NULL, emp_phone varchar (25) ОГРАНИЧЕНИЕ emps_empn_uq УНИКАЛЬНО, emp_mail varchar (25) CONSTRAINT emps_emml_ck CHECK (emp_mail LIKE '_%@%.%'), emp_sal decimal (8,2) CONSTRAINT emp_sal_ck CHECK (emp_sal & amp; amp; amp; lt; & amp; amp; amp; gt; 5000))
ИНОСТРАННЫЙ КЛЮЧ (FK)
В SQL Server ограничение внешнего ключа обозначает столбец (или набор столбцов) как внешний ключ и устанавливает связь между первичным ключом (или уникальным) в другой таблице (или в той же таблице).Синтаксис для определения ограничения проверки следующий:
имя_столбца… [CONSTRAINT имя_ограничения] ССЫЛКИ имя_таблицы (имя_столбца) [ON DELETE CASCADE] [ON DELETE SET NULL]
Пример:
Родительский стол
СОЗДАТЬ ТАБЛИЦУ deps (dep_id decimal (3) CONSTRAINT deps_id_pk PRIMARY KEY, имя_использования varchar (25))
Детский стол
СОЗДАТЬ ТАБЛИЦЫ emps (emp_id decimal (3) CONSTRAINT emps_empid_pk PRIMARY KEY, emp_name varchar2 (25) CONSTRAINT emps_emnm_nn NOT NULL, emp_phone varchar2 (25) ОГРАНИЧЕНИЕ emps_empn_uq УНИКАЛЬНО, emp_mail varchar2 (25) CONSTRAINT emps_emml_ck CHECK (emp_mail LIKE '_% @%.% '), emp_sal decimal (8,2) CONSTRAINT emp_sal_ck CHECK (emp_sal & amp; amp; gt; 5000), dep_id decimal (3) CONSTRAINT emp_depid_fk ССЫЛКИ deps (dep_id))
Ограничения уровня таблицы
- Создается после определения различных столбцов.
- Может относиться к более чем одному столбцу (ограничение, состоящее из двух столбцов вместе).
- Позволяет создать несколько ограничений для одного столбца.
- Невозможно создать ограничение NOT NULL с помощью этого метода.
Например:
СОЗДАТЬ ТАБЛИЦЫ emps (emp_id DECIMAL (3), emp_f_name VARCHAR (25), emp_l_name VARCHAR (25), emp_phone VARCHAR (25) CONSTRAINT emps_empn_nn NOT NULL, emp_mail VARCHAR (25), emp_sal DECIMAL (8,2), dep_id DECIMAL (3), ОГРАНИЧЕНИЕ emps_empid_pk ПЕРВИЧНЫЙ КЛЮЧ (emp_id), ОГРАНИЧЕНИЕ emps_empn_uq UNIQUE (emp_f_name, emp_l_name), CONSTRAINT emps_emml_ck1 CHECK (emp_mail LIKE '_%@%.%'), CONSTRAINT emps_emml_ck2 CHECK (LENGTH (emp_mail) & amp; amp; gt; 15), ОГРАНИЧЕНИЕ emps_emml_uq UNIQUE (emp_mail), ОГРАНИЧИТЕЛЬНАЯ ПРОВЕРКА emp_sal_ck (emp_sal & amp; amp; gt; 5000), ОГРАНИЧЕНИЕ emp_depid_fk ИНОСТРАННЫЙ КЛЮЧ (dep_id) ССЫЛКИ deps (dep_id))
Удалить существующую таблицу
Синтаксис, используемый для удаления существующей таблицы в SQL Server, следующий:
DROP TABLE имя_таблицы
Например
DROP TABLE сотрудники
Создание новой базы данных и таблицы SQL в Azure — статьи TechNet — США (английский)
В этой статье мы подробно рассмотрим, как создать первую базу данных SQL Server в Azure и создать таблицу для базы данных SQL Azure из SQL Server Management Studio.
Используя свою учетную запись Azure, войдите на сайт Azure. На странице панели инструментов в меню слева мы можем увидеть базы данных SQL. Щелкните это меню, чтобы создать нашу первую базу данных SQL в Azure.
Мы видим значок «Добавить» вверху. Чтобы снова создать нашу первую базу данных SQL
щелкните значок Добавить.
Здесь мы даем имя нашей новой базе данных и выбираем или создаем нашу группу ресурсов.
Если у нас нет созданного SQL Server, то сначала нам нужно создать новый SQL Server для создания нашей базы данных.
Здесь мы даем нашему новому серверу имя, идентификатор входа и пароль для входа на наш сервер SQL Azure.
После создания нашего сервера выберите только что добавленный SQL-сервер для создания нашей базы данных.
Нажмите кнопку «Создать» внизу, чтобы создать нашу новую базу данных на выбранном сервере. Теперь мы можем увидеть подтверждающее сообщение как Validation Successful.
Мы видим, что наша новая база данных создана.
Мы можем видеть все детали для вновь созданной базы данных на странице панели управления базой данных.
Чтобы узнать наше подключение к Azure SQL, мы можем щелкнуть «Показать строки подключения к базе данных». Мы видим строку подключения для ADO.NET, ODBC, PHP и JDBC. Мы можем использовать эту строку подключения в нашей технологии
приложения для подключения к базам данных Azure. Например, для работы с Microsoft .NET мы можем выбрать ADO.NET, для работы с JSP или java мы можем использовать JDBC или ODBC, а для работы с приложением PHP мы можем использовать строки подключения PHP.
Теперь мы создали нашу базу данных SQL в Azure, и для создания таблиц и вставки образца записи мы будем использовать SQL Server Management Studio для подключения к нашему серверу Azure.
Нам нужно указать имя нашего Azure SQL Server с нашим идентификатором и паролем.
Когда мы пытаемся подключиться в первый раз, мы можем получить сообщение об ошибке, подобное изображению ниже.
Эта ошибка возникает из-за того, что правило брандмауэра не установлено нашим выбранным сервером Azure.
Вы можете найти «Настроить брандмауэр сервера» вверху. Щелкните, чтобы установить правило брандмауэра.
Нажмите «Добавить IP-адрес клиента», чтобы установить новое правило межсетевого экрана.
Нажмите «Сохранить», чтобы добавить наши новые настройки брандмауэра.
После сохранения новых настроек брандмауэра снова подключитесь к нашему серверу Azure SQL из нашей локальной студии управления SQL Server.
Теперь мы подключили наш сервер SQL Azure, давайте создадим таблицы и вставим запись в нашу базу данных Azure.
В Query Analyzer запустите приведенный ниже сценарий Create SQL, чтобы создать наши таблицы.
ЕСЛИ ЕСТЬ (
ВЫБРАТЬ
[ название
]
ИЗ
sys.столы ГДЕ
[ название
] =
'HotelMaster'
)
КАПЛЯ
ТАБЛИЦА
ОтельМастер
GO
СОЗДАТЬ
ТАБЛИЦА
ОтельМастер
(
RoomID
внутренний
identity (1,1),
Комн.
VARCHAR
(100)
НЕ
NULL
,
Тип помещения
VARCHAR
(100)
НЕ
NULL
,
Приз
VARCHAR
(100)
НЕ
NULL
ОГРАНИЧЕНИЕ
[PK_HotelMaster]
ПЕРВИЧНЫЙ
КЛЮЧ
КЛАСТЕРИРОВАННЫЕ
(
RoomID
ASC
)
С
(PAD_INDEX =
ВЫКЛ.
, STATISTICS_NORECOMPUTE =
ВЫКЛ.
, IGNORE_DUP_KEY =
ВЫКЛ.
, ALLOW_ROW_LOCKS =
НА
, ALLOW_PAGE_LOCKS =
НА
)
НА
[ ПЕРВИЧНЫЙ
]
)
НА
[ ПЕРВИЧНЫЙ
]
Вставка
в
HotelMaster (RoomNo, RoomType, Prize) Значения
(
'101'
,
'Single'
,
'50 $ '
)
Вставка
в
HotelMaster (RoomNo, RoomType, Prize) Значения
(
'102'
,
'Double'
,
'80 $ '
)
выбрать
*
из
HotelMaster
ЕСЛИ ЕСТЬ (
ВЫБРАТЬ
[ название
]
ИЗ
sys.столы ГДЕ
[ название
] =
«Бронирование номеров»
)
КАПЛЯ
ТАБЛИЦА
RoomBooking
GO
СОЗДАТЬ
ТАБЛИЦА
RoomBooking
(
BookingID
внутренний
identity (1,1),
RoomID
внутренний
,
BookedDateFR
VARCHAR
(20)
НЕ
NULL
,
ЗабронированоDateTO
VARCHAR
(20)
НЕ
NULL
,
BookingStatus
VARCHAR
(100)
НЕ
NULL
,
Статус платежа
VARCHAR
(100)
НЕ
NULL
,
Авансовый платеж
VARCHAR
(100)
НЕ
NULL
,
TotalAmountPayed
VARCHAR
(100)
НЕ
NULL
,
ОГРАНИЧЕНИЕ
[PK_RoomBooking]
ПЕРВИЧНЫЙ
КЛЮЧ
КЛАСТЕРИРОВАННЫЕ
(
[BookingID]
ASC
)
С
(PAD_INDEX =
ВЫКЛ.
, STATISTICS_NORECOMPUTE =
ВЫКЛ.
, IGNORE_DUP_KEY =
ВЫКЛ.
, ALLOW_ROW_LOCKS =
НА
, ALLOW_PAGE_LOCKS =
НА
)
НА
[ ПЕРВИЧНЫЙ
]
)
НА
[ ПЕРВИЧНЫЙ
]
Переменная таблицы в SQL Server
В этой статье мы рассмотрим табличную переменную в SQL Server на различных примерах, а также обсудим
несколько полезных советов о переменных таблицы.
Определение
Табличная переменная — это особый тип локальной переменной, которая помогает временно хранить данные, подобно временной таблице в SQL Server. Фактически, табличная переменная предоставляет все свойства локальной переменной, но локальная
переменные имеют некоторые ограничения, в отличие от временных или обычных таблиц.
Синтаксис
Следующий синтаксис описывает, как объявить табличную переменную:
DECLARE @LOCAL_TABLEVARIABLE TABLE (DATATYPE column_1, DATATYPE column_2, column_N DATATYPE ) |
Если мы хотим объявить табличную переменную, мы должны запустить оператор DECLARE, который похож на локальные переменные.Имя локальной переменной должно начинаться со знака (@). Ключевое слово TABLE указывает, что эта переменная является табличной переменной. После ключевого слова TABLE мы должны определить имена столбцов и типы данных переменной таблицы в SQL Server.
В следующем примере мы объявим табличную переменную и вставим дни недели и их сокращения.
в переменную таблицы:
DECLARE @ListOWeekDays TABLE (DyNumber INT, DayAbb VARCHAR (40), WeekName VARCHAR (40)) INSERT INTO @ListOWeekDays VALUES (1, ‘понедельник’, (1, ‘понедельник) 2, «Вт», «Вторник»), (3, «Среда», «Среда»), (4, «Чт», «Четверг»), (5, «Пт», «Пятница») ‘), (6,’ сб ‘,’ суббота ‘), (7,’ вс ‘,’ воскресенье ‘) ВЫБРАТЬ * ИЗ @ListOWeekDays |
В то же время мы можем обновлять и удалять данные, содержащиеся в переменных таблицы.Следующий запрос удаляет и
обновить строки:
DECLARE @ListOWeekDays TABLE (DyNumber INT, DayAbb VARCHAR (40), WeekName VARCHAR (40)) INSERT INTO @ListOWeekDays VALUES (1, ‘понедельник’, (1, ‘понедельник) 2, «Вт», «Вторник»), (3, «Ср.», «Среда»), (4, «Чт», «Четверг»), (5, «Пт», «Пятница» ‘), (6,’ Сб ‘,’ Суббота ‘), (7,’ Вс, ‘Воскресенье’) УДАЛИТЬ @ListOWeekDays ГДЕ DyNumber = 1 ОБНОВЛЕНИЕ @ListOWeekDays УСТАНОВИТЬ WeekName = ‘Суббота holiday ‘ГДЕ DyNumber = 6 ВЫБРАТЬ * ИЗ @ListOWeekDays |
Какое место хранения переменных таблицы?
Ответ на этот вопрос — переменные таблицы хранятся в базе данных tempdb.Мы подчеркиваем это потому, что
иногда ответ на этот вопрос состоит в том, что переменная таблицы хранится в памяти, но это совершенно неверно.
Прежде чем доказывать ответ на этот вопрос, мы должны прояснить одну проблему, касающуюся табличных переменных. Жизненный цикл
переменные таблицы начинаются в точке объявления и заканчиваются в конце пакета. В результате таблица
переменная в SQL Server автоматически удаляется в конце пакета:
DECLARE @ExperiementTable TABLE ( TestColumn_1 INT, TestColumn_2 VARCHAR (40), TestColumn_3 VARCHAR (40) ); ВЫБРАТЬ ТАБЛИЦУ_КАТАЛОГ, ТАБЛИЦУ_SCHEMA, COLUMN_NAME, DATA_TYPE FROM tempdb.INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE ‘TestColumn%’; GO SELECT TABLE_CATALOG, TABLE_SCHEMA, COLUMN_NAME, DATA_TYPE FROM tempdb.INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE ‘TestColumn%; |
Как видите, предыдущий запрос возвращает два набора результатов. ResultSet-1 содержит имена столбцов и типы данных объявленной табличной переменной, а ResultSet-2 не содержит никаких данных.Причина этого случая — первая
INFORMATION_SCHEMA.COLUMNS и табличная переменная выполняются в одном пакете, чтобы мы могли получить информацию о
Табличная переменная @ExperiementTable из базы данных tempdb. Второй запрос не смог вернуть никаких данных о
@ExperiementTable, потому что оператор GO завершает пакет, поэтому жизненный цикл табличной переменной @ExperiementTable завершается. В этом разделе мы доказали место хранения табличной переменной в SQL Server.
Как мы можем использовать ограничения с табличными переменными?
Ограничения — это объекты базы данных, обеспечивающие целостность данных. Табличные переменные позволяют нам создавать следующие
ограничения:
- Основной ключ
- Уникальный
- Значение NULL
- Проверьте
В следующем примере мы успешно используем все типы ограничений для табличной переменной:
DECLARE @TestTable TABLE (ID INT PRIMARY KEY, Col1 VARCHAR (40) UNIQUE, Col2 VARCHAR (40) NOT NULL, Col3 int CHECK (Col3> = 18)) INIQUE INTO @TestTable VALUES (1, ‘Value1’, 12, 20) ВЫБРАТЬ * ИЗ @TestTable |
С другой стороны, ограничения внешнего ключа не могут использоваться для переменных таблицы.Другое ограничение: мы должны
определить ограничения, когда мы объявляем табличную переменную, иначе мы получим ошибку. Например, следующий запрос вернет ошибку из-за этого ограничения. Мы не можем изменить структуру таблицы после
объявление переменной таблицы:
DECLARE @TestTable TABLE (ID INT NOT NULL) ALTER TABLE @TestTable ADD CONSTRAINT PK_ID PRIMARY KEY (ID) |
Транзакции и табличная переменная в SQL Server
Транзакции — это наименьшая логическая единица, которая помогает управлять CRUD (вставка, выбор, обновление и удаление)
операции в SQL Server.Явные транзакции запускаются с помощью оператора BEGIN TRAN и могут быть завершены
с операторами COMMIT или ROLLBACK. Теперь мы выполним следующий запрос и проанализируем результат:
DECLARE @TestTable TABLE (ID INT PRIMARY KEY, Col1 VARCHAR (40) UNIQUE, Col2 VARCHAR (40) NOT NULL, Col3 int CHECK (Col3> = 18)) TRAN INSERT INTO @TestTable VALUES (1, ‘Value1’, 12, 20) ROLLBACK TRAN SELECT * FROM @TestTable |
Операции CRUD с табличной переменной не управляются явными транзакциями.В результате ROLLBACK TRAN не может стереть
измененные данные для переменных таблицы.
Несколько полезных советов по табличным переменным
Оператор
TRUNCATE не работает для табличных переменных
Оператор TRUNCATE помогает очень быстро удалить все строки в таблицах. Однако это утверждение нельзя использовать
для табличных переменных. Например, следующий запрос вернет ошибку:
DECLARE @TestTable TABLE (ID INT PRIMARY KEY, Col1 VARCHAR (40) UNIQUE, Col2 VARCHAR (40) NOT NULL, Col3 int CHECK (Col3> = 18) INIQUE (Col3> = 18)) INTO @TestTable VALUES (1, ‘Value1’, 12, 20) TRUNCATE TABLE @TestTable |
Структура табличной переменной не может быть изменена после того, как она была объявлена
Согласно этой интерпретации подсказки, следующий запрос должен возвращать ошибку:
DECLARE @TestTable TABLE (ID INT PRIMARY KEY, Col1 VARCHAR (40) UNIQUE, Col2 VARCHAR (40) NOT NULL) ALTER TABLE 900DDD 9000Color 325 |
Табличная переменная в SQL Server должна использовать псевдоним с операторами соединения
Если мы хотим объединить две или более переменных таблицы друг с другом или с обычными таблицами, мы должны использовать псевдоним для
имена таблиц.Использование этого выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 13 14 18 19 | DECLARE @Department TABLE (DepartmentID INT PRIMARY KEY, DepName VARCHAR (40) UNIQUE) INSERT INTO @Department VALUES (1, «Marketing») @ VALUES (1, ‘Marketing’) @ VALUE INSERT INTO Финансы ‘) INSERT INTO @Department VALUES (3,’ Operations ‘) DECLARE @Employee TABLE (EmployeeID INT PRIMARY KEY IDENTITY (1,1), Имя сотрудника VARCHAR ( ), VARCHAR (40)) INSERT INTO @Employee VALUES (‘Jodie Holloway’, ‘1’) INSERT INTO @Employee VALUES (‘Victoria Lyons’, ‘2’) INSERT INTO @Employee VALUES Callum Lee ‘,’ 3 ‘) выберите * из внутреннего соединения @Department Dep @Employee Emp on Dep.DepartmentID = Emp.DepartmentID |
Табличная переменная не позволяет создать явный индекс
Индексы помогают повысить производительность запросов, но оператор CREATE INDEX нельзя использовать для создания
index для переменных таблицы. Например, следующий запрос вернет ошибку:
DECLARE @TestTable ТАБЛИЦА (ID INT PRIMARY KEY, Col1 VARCHAR (40) UNIQUE, Col2 VARCHAR (40) NOT NULL) CREATE INDEX1_INDEXT_INDOWS_INDOWS_INDER (CREATE INDEX2 NONCLUS5 ) |
Однако мы можем решить эту проблему с помощью неявных определений индекса, потому что PRIMARY KEY
ограничения или определения ограничений UNIQUE автоматически создают индекс, и мы можем использовать эти операторы INDEX в
для создания одиночных или составных некластеризованных индексов.Когда мы выполняем следующий запрос, мы можем выяснить
созданный индекс, принадлежащий @TestTable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 13 14 18 | DECLARE @TestTable TABLE ( Col1 INT NOT NULL PRIMARY KEY, Col2 INT NOT NULL INDEX Cluster_I1 (Col1, Col2), Col3 INT NOT NULL UNIQUE экз.имя, type_desc FROM tempdb.sys.indexes ind где ind.object_id = ( ВЫБРАТЬ ИД_ОБЪЕКТА ИЗ tempdb.sys.objects объект ГДЕ ИМЯ_ОБЪЕКТА IN (tempdb.sys.objects) ГДЕ ИМЯ_ОБЪЕКТА IN ( TORM. COLUMNS WHERE (COLUMN_NAME = ‘Col1’ OR COLUMN_NAME = ‘Col2’ OR COLUMN_NAME = ‘Col3’) )) |
Заключение
В этой статье мы подробно изучили табличную переменную в SQL Server на различных примерах.Также мы упомянули особенности и ограничения табличных переменных.
Эсат Эркеч — специалист по SQL Server, который начал свою карьеру более 8 лет назад в качестве разработчика программного обеспечения. Он является сертифицированным экспертом по решениям Microsoft SQL Server.
Большая часть его карьеры была сосредоточена на администрировании и разработке баз данных SQL Server. В настоящее время он интересуется администрированием баз данных и бизнес-аналитикой. Вы можете найти его в LinkedIn.
Посмотреть все сообщения от Esat Erkec
Последние сообщения от Esat Erkec (посмотреть все)
Как создать таблицу из результатов запроса в Microsoft SQL | Small Business
Дэвид Уэйн Обновлено 22 февраля 2019 г.
Если ваша компания использует реляционные базы данных для хранения данных, полезно использовать команду SQL SELECT с предложением INTO для создания новых таблиц из результатов запроса.Этот метод не соответствует стандарту ANSI SQL, но расширение Microsoft Transact-SQL включает эту удобную функцию. Создание новой таблицы из результатов запроса может помочь вам создать базу данных о ваших клиентах, сотрудниках, расходах и других бизнес-деталях, позволяя выбирать определенные столбцы из существующих таблиц. Эта стратегия помогает вам управлять взаимосвязанными таблицами в вашей базе данных.
Запустить инструмент запросов SQL Server
Нажмите кнопку Start и запустите Microsoft SQL Server Management Studio.Щелкните меню Server Name и выберите свой сервер из раскрывающегося списка. Щелкните Connect .
Создание запроса SELECT INTO
Щелкните правой кнопкой мыши базу данных в обозревателе объектов в левой части экрана. Щелкните Новый запрос в контекстном меню. В окне запроса введите следующий оператор:
SELECT client_id, first_name, last_name INTO new_table FROM old_table; GO
Замените «new_table» именем создаваемой таблицы, а «old_table» — именем таблицы, из которой нужно выбрать.Предложение INTO ведет себя так же, как CREATE TABLE в других средах SQL.
Уточните свой запрос
Введите следующие строки в окне запроса, чтобы уточнить результаты запроса:
SELECT * INTO new_table FROM old_table WHERE last_name LIKE ‘Ja%’; GO
Ключевое слово LIKE позволяет фильтровать результаты на основе выражения с подстановочными знаками. В этом примере Transact-SQL создаст новую таблицу со всеми столбцами из строк в «old_table», в которой фамилия начинается с «Ja.”
Экспериментируйте с выбором подстановочных знаков
Обведите текстовый шаблон символами«% », чтобы он соответствовал тексту в середине слов. Например, используйте следующее предложение WHERE в своем операторе SELECT:
WHERE last_name LIKE ‘% ta%’
В этом примере будут возвращены все совпадения, содержащие шаблон «ta» в середине слова.
SELECT INTO с UNION
Создайте новую таблицу из результатов двух отдельных запросов с ключевым словом UNION.Создайте оператор SELECT, подобный следующему в окне запроса:
SELECT last_name, адрес INTO new_table FROM old_table_a, WHERE address NOT LIKE ‘% Los Angeles%’ UNION SELECT last_name, address FROM old_table_b WHERE address NOT LIKE ‘% Los Angeles%’ ; GO
Вам не нужно включать предложение INTO в оба оператора SELECT. Просто объедините два оператора SELECT с ключевым словом UNION, чтобы объединить результаты двух запросов в новую таблицу.
Совет
При работе с базами данных, отличными от Microsoft SQL Server, проверьте руководство, чтобы узнать, поддерживает ли оно SELECT INTO.Он может поддерживать синтаксис или использовать другой способ выполнения той же задачи.
Как создать диаграмму ER для существующей базы данных SQL Server с помощью SSMS
Обратите внимание, что SSMS 18 больше не поддерживает диаграммы .
Оцените альтернативу.
В этом руководстве я покажу вам, как создать диаграмму ER с Microsoft SQL Server Management Studio (SSMS) 16.
1. Создание новой диаграммы
Чтобы создать новую диаграмму базы данных, вам нужно будет щелкнуть правой кнопкой мыши папку Database Diagrams и выбрать New Database Diagram .
Если вы собираете диаграмму впервые, вы можете получить следующее сообщение:
SSMS требует некоторых системных процедур и таблицы, которые не создаются вместе с базой данных. Вам необходимо подтвердить их создание. Это создаст в вашей базе данных следующие системные процедуры:
- dbo.sp_alterdiagram
- dbo.sp_dropdiagram
- dbo.sp_creatediagram
- dbo.sp_renamediagram
- dbo.sp_helpdiagramdefinition
- dbo.sp_helpdigarms
- dbo.sp_upgradediagrams
и стол:
Если появляется указанное выше сообщение, вам нужно снова щелкнуть правой кнопкой мыши папку Database Diagrams и выбрать опцию New Database Diagram .
Появится окно со списком всех таблиц в вашей базе данных. Чтобы добавить таблицы на диаграмму, выберите их (используйте клавиши Control или Shift для одновременного выбора нескольких) и нажмите кнопку Добавить или дважды щелкните по ним.Когда вы добавите все необходимые таблицы, нажмите кнопку Закрыть .
Вы можете добавить столы позже. Просто щелкните правой кнопкой мыши на панели диаграммы и выберите Добавить таблицу ….
Будет создана диаграмма со столбцами таблиц, первичными ключами и отношениями, которые были прочитаны из схемы.
2. Схема настройки
На данный момент у вас есть диаграмма со всеми таблицами, но она может выглядеть не так, как вы хотите.В SSMS есть очень полезная функция — Autosize . Выберите все таблицы (Ctrl + A), щелкните одну из них правой кнопкой мыши и выберите Автоматически изменить размер выбранных таблиц .
Таблицы будут размещены на диаграмме. Если вас не устраивает результат, вы можете перетащить их для лучшего выравнивания.
Вы также можете решить, как отображать таблицы. Щелкните правой кнопкой мыши по таблице и выберите один из вариантов в Table View .
Названия столбцов
Эта опция показывает только имена столбцов и первичный ключ.
Стандартный
Эта опция будет включать основные атрибуты столбца.
Ключи
Эта опция будет включать только столбцы, которые являются частью первичного, уникального или внешнего ключа.
Только имя
Эта опция отображает только имена таблиц.
Пользовательский
Вы также можете создать собственное представление, в котором вы можете выбрать, какие атрибуты столбца вы хотите включить.
После небольшого обновления моя диаграмма выглядит так:
3. Добавление связанных таблиц
В редакторе
SSMS есть одна полезная функция. Вы можете автоматически добавлять на диаграмму все таблицы, относящиеся к определенной таблице (с отношениями внешнего ключа). Для этого щелкните таблицу правой кнопкой мыши и выберите Добавить связанные таблицы .
4. Добавление меток отношений
SSMS позволяет добавлять метки к отношениям.Это всегда имя ограничения внешнего ключа. Ничего особенно полезного, если вы спросите меня.
Чтобы добавить метки, щелкните правой кнопкой мыши на панели диаграммы и выберите «Показать метки отношений».
5. Добавление аннотаций
Одна полезная опция — это возможность добавлять аннотации к диаграмме. Чтобы добавить аннотацию, щелкните правой кнопкой мыши на панели и выберите New Text Annotation .
Это создаст пустое текстовое поле, в котором вы можете оставить свои заметки и комментарии.Это всегда будет видно и экспортировать вместе с вашей диаграммой.
6. Схема сохранения
Вы можете сохранить свою диаграмму в базе данных (она будет сохранена в таблице dbo.sysdiagrams, которую вы создали ранее). Чтобы сохранить диаграмму, перейдите в Файл -> Сохранить диаграмму_0 (это имя по умолчанию для первой диаграммы) или закройте редактор. Вам будет предложено ввести имя диаграммы. Введите имя и нажмите OK .
7. Экспорт диаграммы
Management Studio позволяет экспортировать диаграмму в изображение.Чтобы преобразовать его в изображение, щелкните правой кнопкой мыши панель диаграммы и выберите Копировать диаграмму в буфер обмена . Теперь вы можете вставить его в графическое ПО или в документ.
8. Схема открытия
Все диаграммы, сохраненные в базе данных, отображаются в папке Database Diagrams . Чтобы открыть диаграмму, дважды щелкните по ней или щелкните правой кнопкой мыши и выберите вариант Изменить .
Плюсы и минусы диаграмм в SSMS
Плюсы
- Возможность добавления нескольких диаграмм в базу данных
- Ведение диаграмм со схемой базы данных
- Изменения схемы автоматически отображаются на диаграмме
- Возможность добавлять аннотации
- Возможность настройки отображения таблицы
- Уже есть инструмент, который используется администраторами баз данных и разработчиками
Минусы
- Ограниченные возможности форматирования
- Невозможно добавить представления на диаграмму
- Невозможно показать отношения, которые не определены в качестве ограничений внешнего ключа
- Требуется доступ к базе данных
Другой способ: Dataedo
Есть лучший способ создавать и публиковать диаграммы существующих баз данных — Dataedo.Вот пример экспорта полной документации по базе данных:
См. Живую HTML-базу данных, образец
Некоторые преимущества:
- Простой и удобный обмен в интерактивном HTML
- Рисование диаграмм для баз данных без ограничений FK
- Построение диаграмм, охватывающих базы данных
- Прикрепите полный словарь данных
Попробовать сейчас бесплатно
SQL CREATE TABLE
Резюме: в этом руководстве вы узнаете, как использовать оператор SQL CREATE TABLE для создания новых таблиц в базе данных.
Введение в оператор SQL CREATE TABLE
Таблица — это базовый элемент базы данных. Таблица похожа на электронную таблицу, которая содержит столбцы и строки. Таблица используется для хранения данных, например, о клиентах, поставщиках, товарах.
Для создания новой таблицы вы используете оператор SQL CREATE TABLE. Ниже показан общий синтаксис оператора SQL CREATE TABLE:
CREATE TABLE имя_таблицы ( имя_столбца1 тип_данных (длина_данных), имя_столбца2 тип_данных (длина_данных), .. CONSTRAINTS имя_ограничения PRIMARY KEY | UNIQUE | … ) |
Давайте рассмотрим оператор более подробно:
- Имя таблицы : рекомендуется, чтобы имя таблицы было таким же значимым, как возможный. Вы должны использовать множественное число существительного для названия таблицы, например, продукты, заказы, поставщики .. . И т. Д.
- Имя столбца : как и имя таблицы, вы должны использовать значение имени столбца.Если имя столбца длиннее, вы можете использовать аббревиатуру, например ID для идентификации, Нет для номера.
- Тип данных столбца : необходимо выбрать соответствующий тип данных для каждого столбца в таблице. Наиболее распространенными типами данных являются текст (VARCHAR, NVARCHAR), числовой (SMALLINT, INT, BIGINT), DATE, TIME, DATETIME, BLOB. Пожалуйста, обратитесь к конкретному руководству пользователя системы баз данных, с которой вы работаете, чтобы найти поддерживаемые типы данных.
- Размер столбца : вы должны указать максимальную длину данных для каждого столбца.Например, если вы храните название продукта, попробуйте представить максимальную длину, которую может содержать продукт.
- Ограничение : Вы можете определить ограничение PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL или CHECK с помощью ключевого слова CONSTRAINT. Ключевое слово CONSTRAINT необязательно.
SQL Пример CREATE TABLE
Мы собираемся создать новую таблицу с именем Projects для хранения данных проекта. Ниже приводится инструкция для создания таблицы Projects .
CREATE TABLE Projects ( ProjectID int (11) NOT NULL AUTO_INCREMENT, Имя varchar (255) NOT NULL, Описание varchar (4000) DEFAULT NULL, BeginDate date NOT NULL Дата окончания DEFAULT NULL, PRIMARY KEY (ProjectID) ) |
В проектах таблица :
- PorjectID: это первичный ключ, определенный ограничением PRIMARY KEY.