Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Типы специальных данных не подходят ни к одной из других категорий типов данных. Например, для хранения данных в виде значений 0 или 1, которые соответствуют ответам «да» или «нет» в опросе клиентов, используйте тип данных bit. Microsoft SQL Server 2005 содержит несколько соответствующих этой категории типов данных:
bit
Данные типа bit не должны быть заключены в одинарные кавычки. Данные такого типа являются числовыми данными, схожими с числовыми и целочисленными данными SQL Server, за исключением того, что столбцы типа bit могут содержать лишь значения 0 и 1.Строковые значения true и false можно преобразовать в значения типа bit, как показано ниже:
SELECT CONVERT (bit, 'true'), CONVERT(bit, 'false')Значение True преобразуется в 1, а значение False преобразуется в 0.
sql_variant
Тип данных sql_variant в SQL Server позволяет сохранять данные различных типов в одном столбце, параметре или переменной. В каждом экземпляре столбца типа sql_variant хранятся значения данных и метаданные, описывающие эти значения: его основной тип данных, максимальный размер, масштаб, точность и параметры сортировки.Вторая таблица в следующем примере содержит столбец sql_variant:
CREATE TABLE ObjectTable (ObjectID int CONSTRAINT PKObjectTable PRIMARY KEY, ObjectName nvarchar(80), ObjectWeight decimal(10,3), ObjectColor nvarchar(20)) CREATE TABLE VariablePropertyTable (ObjectID int REFERENCES ObjectTable(ObjectID), PropertyName nvarchar(100), PropertyValue sql_variant, CONSTRAINT PKVariablePropertyTable PRIMARY KEY(ObjectID, PropertyName))Чтобы получить метаданные для любого конкретного экземпляра sql_variant, используйте функцию SQL_VARIANT_PROPERTY.
sysname
Экземпляры SQL Server включают пользовательский тип данных, называемый sysname. sysname используется для столбцов таблицы, переменных и параметров хранимых процедур, которые хранят имена объектов. Точное определение sysname зависит от установленных для идентификаторов правил именования; таким образом, оно может быть различным для различных экземпляров SQL Server. sysname функционально эквивалентен типу nvarchar(128). SQL Server версии 6.5 и более ранней поддерживает только меньшие идентификаторы; таким образом, в ранних версиях sysname определяется как varchar(30).
Важно!В базах данных, учитывающих регистр, или использующих двоичный параметр сортировки, тип данных sysname определяется как системный тип данных SQL Server лишь тогда, когда он введен в нижнем регистре.
table
Тип данных table подобен временным таблицам и может использоваться для хранения результирующего набора для дальнейшей обработки. Этот тип данных может использоваться только для определения локальных переменных типа table и значений, возвращаемых пользовательской функцией.Определение табличной переменной или возвращаемого значения включает определения столбцов, типа данных, точности и размера каждого столбца, необязательных ограничений PRIMARY KEY, UNIQUE, NULL или CHECK. Пользовательский тип данных нельзя использовать в качестве типа данных.
Формат строк, хранимых в переменной table или возвращаемых пользовательской функцией, должен быть определен при объявлении переменной или при создании функции. Синтаксис основан на синтаксисе инструкции CREATE TABLE. Например:
DECLARE @TableVar TABLE (Cola int PRIMARY KEY, Colb char(3)) INSERT INTO @TableVar VALUES (1, 'abc') INSERT INTO @TableVar VALUES (2, 'def') SELECT * FROM @TableVar GOПеременные table и пользовательские функции, которые возвращают table, можно использовать в определенных инструкциях SELECT и INSERT и в инструкциях UPDATE, DELETE и DECLARE CURSOR, поддерживающих таблицы. Переменные table и пользовательские функции, которые возвращают table, нельзя использовать в инструкциях Transact-SQL.
Индексы и другие применимые к таблице ограничения задаются как часть переменной DECLARE в инструкции CREATE FUNCTION. Они не могут быть применены позднее, потому что инструкции CREATE INDEX и ALTER TABLE не могут ссылаться на табличные переменные и пользовательские функции.
Дополнительные сведения о синтаксисе, используемом для определения переменных и пользовательских функций типа table, см. в разделах DECLARE @local\_variable (Transact-SQL) и CREATE FUNCTION (Transact-SQL).
timestamp
Тип данных SQL Server timestamp не связан со временем или с датой. Значения SQL Server timestamp являются двоичными числами, указывающими относительную последовательность, в которой происходило изменение данных в базе данных. Изначально тип данных timestamp был введен для поддержки алгоритмов восстановления SQL Server. Каждый раз при изменении страницы она маркировалась текущим значением величины DBTS, и это значение увеличивалось на единицу. Это позволяло алгоритму восстановления определить относительную последовательность, в которой изменялись страницы, но значения timestamp не имели никакого отношения ко времени.В SQL Server версии 7.0 и в SQL Server 2000 @@DBTS увеличивается на 1 только при использовании в столбцах timestamp. Если таблица содержит столбец типа timestamp, то каждый раз при изменении строки в результате выполнения инструкций INSERT, UPDATE и DELETE значение timestamp в строке устанавливается в текущее значение @@DBTS, а затем значение @@DBTS увеличивается на 1.
Никогда не используйте столбцы timestamp в качестве ключей, особенно первичных ключей, потому что значение timestamp изменяется всякий раз при изменении строки.
Чтобы записывать время, когда происходило изменение данных в таблице, используйте либо тип данных datetime, либо smalldatetime для записи событий, а триггеры для автоматического обновления значений — всякий раз, когда происходят изменения.
Псевдонимы типов данных
Псевдонимы типов данных позволяют расширить базовые типы данных SQL Server (например, varchar) содержательным именем и форматом, приспособленным для конкретного использования. Например, эта инструкция создает пользовательский тип данных birthday, допускающий значения NULL, используя в качестве базового тип данных datetime:EXEC sp_addtype birthday, datetime, 'NULL'Будьте внимательны при выборе базовых типов, применяемых для пользовательских типов. Например, в США номера социального страхования (SSN) имеют формат nnn-nn-nnnn. Хотя номера социального страхования содержат числа, эти числа образуют идентификатор, и к ним нельзя применять математические операции. Поэтому обычно определяется пользовательский тип данных varchar для номера социального страхования и создается проверочное ограничение, чтобы обеспечить необходимый формат номера социального страхования:
EXEC sp_addtype SSN, 'VARCHAR(11)', 'NOT NULL' GO CREATE TABLE ShowSSNUsage (EmployeeID int PRIMARY KEY, EmployeeSSN SSN, CONSTRAINT CheckSSN CHECK ( EmployeeSSN LIKE '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' ) ) GOЕсли столбцы SSN используются в качестве ключевых столбцов в индексах, особенно в кластеризованных индексах, то размер ключей можно сократить с 11 байт до 4 байт, если пользовательский тип данных SSN определен с использованием базового типа данных int. Уменьшение размера ключа улучшает извлечение данных. Улучшение эффективности извлечения данных и устранение необходимости проверочного ограничения CHECK обычно перевешивают издержки, связанные с преобразованием типа int к символьному формату при отображении или изменении значений SSN.
См. также
Другие ресурсы
CREATE FUNCTION (Transact-SQL)
Типы данных (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)
table (Transact-SQL)