CREATE TABLE


Главная - Примеры разработки 1С - CREATE TABLE
CREATE TABLE [database.[owner].]table_name
(
{col_name column_properties [constraint [constraint [...constraint]]]
| [[,] constraint]}
[[,] {next_col_name | next_constraint}...]
)
[ON segment_name]
Создает таблицу
Кроме обычных таблиц можно также создавать и временные таблицы - такими таблицами являются те, чье имя начинается с #(локальные временные таблицы) или ##(глобальные временные таблицы). Временные таблицы сушествуют только на время клиентской сессии и после ее окончания автоматически уничтожаются. Кроме того, временные таблицы, созданные в хранимой процедуре автоматически уничтожаются после ее окончания. Временные таблицы создаются в базе данных tempdb, и вносятся в таблицу tempdb..sysobjects под указанным именен + некоторая строка, генереруемая сервером. При создании временных таблиц нельзя использовать ограничение FOREIGN KEY и ON segment_name
column_properties =
datatype [NULL | NOT NULL | IDENTITY[(seed, increment)]]
datatype
Опрелеляет тип создаваемой колонки - как системный, так и определяемый пользователем.
IDENTITY[(seed, increment)]
Для колонки с таким свойством сервером автоматически генерируется возрастающая последовательность, начиная с seed и приращением increment.
!
Обратите внимание: Сервер не гарантирует непрерывность или уникальность значений - в реальных данных, лежащих в таблице могут появляться разрывы. Для избежания ошибок с уникальностью используйте ограничение PRIMARY KEY
constraint
Может включать в себя ограничение как для столбца, так и для всей таблицы. Всего на таблицу может быть не более одного PRIMARY KEY, не более чем 249 UNIQUE, не более чем 31 FOREIGN KEY (каждый из которых может ссылаться не более чем на 16 колонок), не более одного DEFAULT на колонку, и неограниченное число CHECK. Все эти ограничения могут находиться в одном операторе CREATE TABLE. Синтаксис этих ограничений таков:
PRIMARY KEY:
[CONSTRAINT constraint_name]
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
(col_name [, col_name2 [..., col_name16]])
[ON segment_name]
UNIQUE:
[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
(col_name [, col_name2 [..., col_name16]])
[ON segment_name]
FOREIGN KEY:
[CONSTRAINT constraint_name]
[FOREIGN KEY (col_name [, col_name2 [..., col_name16]])]
REFERENCES [owner.]ref_table [(ref_col [, ref_col2
[..., ref_col16]])]
DEFAULT:
[CONSTRAINT constraint_name]
DEFAULT {constant_expression | niladic-function | NULL}
[FOR col_name]
CHECK:
[CONSTRAINT constraint_name]
CHECK [NOT FOR REPLICATION] (expression)
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
Определяет первичный ключ таблицы и тип индекса, который будет для него построен.
!
Обратите внимание: Все колонки, входящие в первичный ключ не могут быть объявлены как NULL. Если же этот параметр при созданни был опущен - для всех колонок принимается NOT NULL.
UNIQUE [CLUSTERED | NONCLUSTERED]
Определяет ограничение уникальности для колонки, и указывает тип индекса, создаваемого для этого. Хотя для UNIQUE и можно использовать поля, допускающие значения типа NULL, все же рекомендуется этого не делать.
По умолчанию созжается некластеризованный индекс.
[FOREIGN KEY (col_name [, col_name2 [..., col_name16]])]
REFERENCES [owner.]ref_table [(ref_col
[, ref_col2 [..., ref_col16]])]
Создает ограничение FOREIGN KEY для таблицы. Число полей и их тип должны совпадать. FOREIGN KEY не может ссылаться на таблицу, находящуюся в другой базе данных.
!
Обратите внимание: Ограничение FOREIGN KEY, в отличие от PRIMARY KEY, НЕ СОЗДАЕТ ИНДЕКСА.
DEFAULT
Указывает значение, используемое по умолчанию. Это должно быть либо константное выражение, в котором допустимо использование т.н. niladic функций. Это
USER
CURRENT_USER
SESSION_USER
SYSTEM_USER
CURRENT_TIMESTAMP
DEFAULT может использоваться для колонок любых типов, кроме timestamp или тех, для которых указано IDENTITY.
CHECK(expression)
Задает условие проверки
Указанное expression должно вычисляться в булево выражение, и если оно принимает значение FALSE - попытка добавления или изменения данных отвергается. При создании таблицы возможно указать только один CHECK, в дальнейшем же их число можно увеличить.
ON segment_name
Указывает сегмент, который будет использоваться для таблицы.
!
Обратите внимание: Если в дальнейшем для этой таблицы будет создан CLUSTERED индекс без указания сегмента - все данные будут перенесены на DEFAULT сегмент.
NB
Обратите внимание: Вышеуказанным свойством можно пользоваться для перемещения таблицы по разным дискам и т.п.
Максимальное число байт на строку равно 1962 - размеру страницы.
NB
Обратите внимание: Дополнив запись до 1962 байта можно получить строчную блокировку. Для получения информации о таблице используйте хранимую процедуру sp_help
Пример

CREATE TABLE employee
(
emp_id empid
CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED
CONSTRAINT CK_emp_id CHECK (emp_id LIKE
[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM] or
emp_id LIKE [A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM] ),
/* Each employee ID consists of three characters that
represent the employee s initials, followed by a five
digit number ranging from 10000 to 99999 and then the
employee s gender (M or F). A - (hyphen) is acceptable
for the middle initial. */
fname varchar(20) NOT NULL,
minit char(1) NULL,
lname varchar(30) NOT NULL,
job_id smallint NOT NULL
DEFAULT 1
/* Entry job_id for new hires. */
REFERENCES jobs(job_id),
job_lvl tinyint
DEFAULT 10,
/* Entry job_lvl for new hires. */
pub_id char(4) NOT NULL
DEFAULT ( 9952 )
REFERENCES publishers(pub_id),
/* By default the Parent Company Publisher is the company
to whom each employee reports. */
hire_date datetime NOT NULL
DEFAULT (getdate())
/* By default the current system date will be entered. */
)