Sql_variant_property (transact-sql)sql_variant_property (transact-sql)
Содержание:
Варианты хранения
Начиная с версии SQL Server 2008, существует два разных варианта хранения, каждый из которых позволяет сохранять объекты LOB и экономить дисковое пространство. Это следующие варианты:
-
хранение данных типа FILESTREAM;
-
хранение с использованием разреженных столбцов (sparse columns).
Эти варианты хранения рассматриваются в следующих подразделах.
Хранение данных типа FILESTREAM
Как уже упоминалось ранее, SQL Server поддерживает хранение больших объектов (LOB) посредством типа данных VARBINARY(MAX). Свойство этого типа данных таково, что большие двоичные объекты (BLOB) сохраняются в базе данных. Это обстоятельство может вызвать проблемы с производительностью в случае хранения очень больших файлов, таких как аудио- или видеофайлов. В таких случаях эти данные сохраняются вне базы данных во внешних файлах.
Хранение данных типа FILESTREAM поддерживает управление объектами LOB, которые сохраняются в файловой системе NTFS. Основным преимуществом этого типа хранения является то, что хотя данные хранятся вне базы данных, управляются они базой данных. Таким образом, этот тип хранения имеет следующие свойства:
-
данные типа FILESTREAM можно сохранять с помощью инструкции CREATE TABLE, а для работы с этими данными можно использовать инструкции для модифицирования данных (SELECT, INSERT, UPDATE и DELETE);
-
система управления базой данных обеспечивает такой же самый уровень безопасности для данных типа FILESTREAM, как и для данных, хранящихся внутри базы данных.
Разреженные столбцы (sparse columns)
Цель варианта хранения, предоставляемого разреженными столбцами, значительно отличается от цели хранения типа FILESTREAM. Тогда как целью хранения типа FILESTREAM является хранение объектов LOB вне базы данных, целью разреженных столбцов является минимизировать дисковое пространство, занимаемое базой данных.
Столбцы этого типа позволяют оптимизировать хранение столбцов, большинство значений которых равны null. При использовании разреженных столбцов для хранения значений null дисковое пространство не требуется, но, с другой стороны, для хранения значений, отличных от null, требуется дополнительно от 2 до 4 байтов, в зависимости от их типа. По этой причине разработчики Microsoft рекомендуют использовать разреженные столбцы только в тех случаях, когда ожидается, по крайней мере, 20% общей экономии дискового пространства.
Разреженные столбцы определяются таким же образом, как и прочие столбцы таблицы; аналогично осуществляется и обращение к ним. Это означает, что для обращения к разреженным столбцам можно использовать инструкции SELECT, INSERT, UPDATE и DELETE таким же образом, как и при обращении к обычным столбцам. Единственная разница касается создания разреженных столбцов: для определения конкретного столбца разреженным применяется аргумент SPARSE после названия столбца, как это показано в данном примере:
имя_столбца тип_данных SPARSE
Несколько разреженных столбцов таблицы можно сгруппировать в набор столбцов. Такой набор будет альтернативным способом сохранять значения во всех разреженных столбцах таблицы и обращаться к ним.
Синонимы типов данных (Transact-SQL)
Синонимы типов данных включены в SQL Server ради совместимости со спецификацией ISO.
Эти синонимы и соответствующие им системные типы данных SQL Server приведены в следующей таблице.
Синоним | Системный тип данных SQL Server |
---|---|
Binary varying | varbinary |
char varying | varchar |
character | char |
character | char(1) |
character(n) | char(n) |
character varying(n) | varchar(n) |
Dec | decimal |
Double precision | float |
float for n = 1-7 | real |
float for n = 8-15 | float |
integer | int |
national character(n) | nchar(n) |
national char(n) | nchar(n) |
national character varying(n) | nvarchar(n) |
national char varying(n) | nvarchar(n) |
national text | ntext |
timestamp | rowversion |
Синонимы типов данных можно использовать вместо соответствующих базовых типов данных в инструкциях языка определения данных (data definition language, DDL),
таких как CREATE TABLE, CREATE PROCEDURE или DECLARE @variable. Однако после создания объекта синонимы утрачивают силу.
При создании объекта ему назначается базовый тип данных, связанный с синонимом.
Никаких признаков того, что в инструкции, создавшей объект, был указан синоним, не остается.
Всем объектам, производным от первоначального объекта, таким, как столбцы результирующего набора или выражения, назначается базовый тип данных.
Все последующие вызовы функций работы с метаданными, выполняемые для первоначального объекта и любых производных от него объектов, сообщают базовый тип данных,
а не синоним. Это имеет место при работе с метаданными, например в процедуре sp_help и других системных хранимых процедурах, представлениях информационных схем и различных API-операции над метаданными, сообщающих типы данных столбцов таблицы или результирующего набора.
String Types
Although the numeric and date types are fun, most data you’ll store will be in a string format. This list describes the common string datatypes in MySQL.
-
CHAR(M) − A fixed-length string between 1 and 255 characters in length (for example CHAR(5)), right-padded with spaces to the specified length when stored. Defining a length is not required, but the default is 1.
-
VARCHAR(M) − A variable-length string between 1 and 255 characters in length. For example, VARCHAR(25). You must define a length when creating a VARCHAR field.
-
BLOB or TEXT − A field with a maximum length of 65535 characters. BLOBs are «Binary Large Objects» and are used to store large amounts of binary data, such as images or other types of files. Fields defined as TEXT also hold large amounts of data. The difference between the two is that the sorts and comparisons on the stored data are case sensitive on BLOBs and are not case sensitive in TEXT fields. You do not specify a length with BLOB or TEXT.
-
TINYBLOB or TINYTEXT − A BLOB or TEXT column with a maximum length of 255 characters. You do not specify a length with TINYBLOB or TINYTEXT.
-
MEDIUMBLOB or MEDIUMTEXT − A BLOB or TEXT column with a maximum length of 16777215 characters. You do not specify a length with MEDIUMBLOB or MEDIUMTEXT.
-
LONGBLOB or LONGTEXT − A BLOB or TEXT column with a maximum length of 4294967295 characters. You do not specify a length with LONGBLOB or LONGTEXT.
-
ENUM − An enumeration, which is a fancy term for list. When defining an ENUM, you are creating a list of items from which the value must be selected (or it can be NULL). For example, if you wanted your field to contain «A» or «B» or «C», you would define your ENUM as ENUM (‘A’, ‘B’, ‘C’) and only those values (or NULL) could ever populate that field.
In the next chapter, we will discuss how to create tables in MySQL.
Previous Page
Print Page
Next Page
Аргументы
table_type_definition
То же подмножество данных, которое используется для определения таблицы с помощью инструкции CREATE TABLE. Декларация таблицы включает определения столбцов, имен, типов данных и ограничений. К допустимым типам ограничений относятся только PRIMARY KEY, UNIQUE KEY и NULL.
Дополнительные сведения о синтаксисе см. в статьях CREATE TABLE (Transact-SQL), CREATE FUNCTION (Transact-SQL) и DECLARE @local_variable (Transact-SQL).
collation_definition
Параметры сортировки столбцов, состоящие из поддерживаемых Microsoft Windows языкового стандарта и стиля сопоставления, языкового стандарта Windows и двоичной записи или параметров сортировки Microsoft SQL Server. Если значение аргумента collation_definition не задано, столбец наследует параметры сортировки текущей базы данных. Либо, если столбец определен как имеющий определяемый пользователем тип данных среды CLR, он унаследует параметры сортировки этого определяемого пользователем типа.
Use cases #
Arbitrary-precision integers unlock lots of new use cases for JavaScript.
s make it possible to correctly perform integer arithmetic without overflowing. That by itself enables countless new possibilities. Mathematical operations on large numbers are commonly used in financial technology, for example.
Large integer IDs and high-accuracy timestamps cannot safely be represented as s in JavaScript. This often leads to real-world bugs, and causes JavaScript developers to represent them as strings instead. With , this data can now be represented as numeric values.
could form the basis of an eventual implementation. This would be useful to represent sums of money with decimal precision, and to accurately operate on them (a.k.a. the problem).
Previously, JavaScript applications with any of these use cases had to resort to userland libraries that emulate -like functionality. When becomes widely available, such applications can drop these run-time dependencies in favor of native s. This helps reduce load time, parse time, and compile time, and on top of all that offers significant run-time performance improvements.The native implementation in Chrome performs better than popular userland libraries.
Параметры сортировки функций
Функции, в которые вводится символьная строка и которые выдают ее, используют параметры сортировки входной строки для строки вывода.
Функции, которые обрабатывают несимвольные исходные данные и выдают символьную строку, применяют при выводе параметры сортировки по умолчанию для текущей базы данных.
Функции, обрабатывающие в качестве исходных данных несколько символьных строк и возвращающие символьную строку, задают параметры сортировки для строки вывода по правилам очередности параметров сортировки. Дополнительные сведения см. в статье Очередность параметров сортировки (Transact-SQL).
Remarks
sql_variant может использоваться в столбцах, параметрах, переменных и значениях, возвращаемых определяемыми пользователем функциями. sql_variant позволяет этим объектам баз данных поддерживать значения других типов данных.
Столбец типа sql_variant может содержать строки различных типов данных. Например, в столбце, определенном как sql_variant, могут храниться значения int, binary и char.
Максимальная длина значения типа данных sql_variant составляет 8016 байт. Сюда входят сведения о базовом типе и значение базового типа. Максимальная длина значения соответствующего базового типа составляет 8 000 байт.
Перед тем как задействовать тип данных sql_variant в таких операциях, как сложение и вычитание, его нужно привести к значению базового типа данных.
Типу данных sql_variant может быть присвоено значение по умолчанию. Этот тип данных в качестве значения может содержать значение NULL, однако значению NULL не будет соответствовать базовый тип. Кроме того, тип данных sql_variant не может в качестве базового иметь другой тип данных sql_variant.
Уникальный, первичный или внешний ключ может содержать столбцы типа sql_variant, но общая длина значений данных, составляющих ключ определенной строки, не должна превышать максимальную длину индекса. Эта длина составляет 900 байт.
Таблица может иметь любое количество столбцов типа sql_variant.
Тип sql_variant нельзя использовать в инструкциях CONTAINSTABLE и FREETEXTTABLE.
Протокол ODBC поддерживает тип sql_variant не полностью. Поэтому столбцы типа sql_variant, запрашиваемые через поставщик Microsoft OLE DB для ODBC (MSDASQL), возвращаются в виде двоичных данных. Например, столбец типа sql_variant, содержащий строку «PS2091», возвращается в виде 0x505332303931.
SQL Server Data Types
String Data Types
Data type | Description | Max size | Storage |
---|---|---|---|
char(n) | Fixed width character string | 8,000 characters | Defined width |
varchar(n) | Variable width character string | 8,000 characters | 2 bytes + number of chars |
varchar(max) | Variable width character string | 1,073,741,824 characters | 2 bytes + number of chars |
text | Variable width character string | 2GB of text data | 4 bytes + number of chars |
nchar | Fixed width Unicode string | 4,000 characters | Defined width x 2 |
nvarchar | Variable width Unicode string | 4,000 characters | |
nvarchar(max) | Variable width Unicode string | 536,870,912 characters | |
ntext | Variable width Unicode string | 2GB of text data | |
binary(n) | Fixed width binary string | 8,000 bytes | |
varbinary | Variable width binary string | 8,000 bytes | |
varbinary(max) | Variable width binary string | 2GB | |
image | Variable width binary string | 2GB |
Numeric Data Types
Data type | Description | Storage |
---|---|---|
bit | Integer that can be 0, 1, or NULL | |
tinyint | Allows whole numbers from 0 to 255 | 1 byte |
smallint | Allows whole numbers between -32,768 and 32,767 | 2 bytes |
int | Allows whole numbers between -2,147,483,648 and 2,147,483,647 | 4 bytes |
bigint | Allows whole numbers between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807 | 8 bytes |
decimal(p,s) | Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to 10^38 –1. The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18. The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0 |
5-17 bytes |
numeric(p,s) | Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to 10^38 –1. The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18. The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0 |
5-17 bytes |
smallmoney | Monetary data from -214,748.3648 to 214,748.3647 | 4 bytes |
money | Monetary data from -922,337,203,685,477.5808 to 922,337,203,685,477.5807 | 8 bytes |
float(n) | Floating precision number data from -1.79E + 308 to 1.79E + 308.
The n parameter indicates whether the field should hold 4 or 8 bytes. float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default value of n is 53. |
4 or 8 bytes |
real | Floating precision number data from -3.40E + 38 to 3.40E + 38 | 4 bytes |
Date and Time Data Types
Data type | Description | Storage |
---|---|---|
datetime | From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 milliseconds | 8 bytes |
datetime2 | From January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds | 6-8 bytes |
smalldatetime | From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute | 4 bytes |
date | Store a date only. From January 1, 0001 to December 31, 9999 | 3 bytes |
time | Store a time only to an accuracy of 100 nanoseconds | 3-5 bytes |
datetimeoffset | The same as datetime2 with the addition of a time zone offset | 8-10 bytes |
timestamp | Stores a unique number that gets updated every time a row gets created or modified. The timestamp value is based upon an internal clock and does not correspond to real time. Each table may have only one timestamp variable |
Other Data Types
Data type | Description |
---|---|
sql_variant | Stores up to 8,000 bytes of data of various data types, except text, ntext, and timestamp |
uniqueidentifier | Stores a globally unique identifier (GUID) |
xml | Stores XML formatted data. Maximum 2GB |
cursor | Stores a reference to a cursor used for database operations |
table | Stores a result-set for later processing |
Описание типа данных date
Свойство | Значение |
---|---|
Синтаксис | date |
Использование | DECLARE @MyDate date CREATE TABLE Таблица1 ( Столбец1 date ) |
Формат строковых литералов по умолчанию (используется для клиента нижнего уровня) | ГГГГ-ММ-ДД Дополнительные сведения см. в подразделе «Обратная совместимость для клиентов низкого уровня» следующего раздела. |
Диапазон | От 0001-01-01 до 9999-12-31 (от 1582-10-15 до 9999-12-31 для Informatica) От 1 января 1 года до 31 декабря 9999 года нашей эры (от 15 октября 1582 года до 31 декабря 9999 года для Informatica). |
Диапазоны элементов | ГГГГ обозначает 4 цифры, которые представляют год и принимают значения от 0001 до 9999. Для Informatica значение ГГГГ ограничено диапазоном от 1582 до 9999. ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12. ДД обозначает две цифры, представляющие день указанного месяца и принимающие значения от 01 до 31 в зависимости от месяца. |
Длина в символах | 10 позиций |
Точность, масштаб | 10, 0 |
Объем памяти | 3 байта, фиксированный |
Структура хранилища | Дата хранится в одной переменной типа integer размером 1 или 3 байта. |
Точность | Один день |
Значение по умолчанию | 1900-01-01 Это значение используется как присоединяемая часть даты при неявном преобразовании данных типа time в значение типа datetime2 или datetimeoffset. |
Календарь | Григорианский |
Определяемая пользователем точность в долях секунды | Нет |
Учет и сохранение смещения часового пояса | Нет |
Учет перехода на летнее время | Нет |
Символьные типы данных
Существует два общих вида символьных типов данных. Строки могут представляться однобайтовыми символами или же символами в кодировке Unicode. (В кодировке Unicode для представления одного символа применяется несколько байтов.) Кроме этого, строки могут быть разной длины. В таблице ниже перечислены категории символьных типов данных с их кратким описанием.
Тип данных | Описание |
---|---|
CHAR |
Применяется для представления строк фиксированной длины, состоящих из n однобайтовых символов. Максимальное значение n равно 8000. CHARACTER(n) — альтернативная эквивалентная форма CHAR(n). Если n явно не указано, то его значение полагается равным 1. |
VARCHAR |
Используется для представления строки однобайтовых символов переменной длины (0 < n < 8 000). В отличие от типа данных CHAR, количество байтов для хранения значений типа данных VARCHAR равно их действительной длине. Этот тип данных имеет два синонима: CHAR VARYING и CHARACTER VARYING. |
NCHAR |
Используется для хранения строк фиксированной длины, состоящих из символов в кодировке Unicode. Основная разница между типами данных CHAR и NCHAR состоит в том, что для хранения каждого символа строки типа NCHAR требуется 2 байта, а строки типа CHAR — 1 байт. Поэтому строка типа данных NCHAR может содержать самое большее 4000 символов. Тип NCHAR можно использовать для хранения, например, символов русского алфавита, т.к. однобайтовые кодировки не позволяют делать этого. |
NVARCHAR |
Используется для хранения строк переменной длины, состоящих из символов в кодировке Unicode. Для хранения каждого символа строки типа NVARCHAR требуется 2 байта, поэтому строка типа данных NVARCHAR может содержать самое большее 4000 символов. |
Тип данных VARCHAR идентичен типу данных CHAR, за исключением одного различия: если содержимое строки CHAR(n) короче, чем n символов, остаток строки заполняется пробелами. А количество байтов, занимаемых строкой типа VARCHAR, всегда равно количеству символов в ней.
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты нижнего уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. В следующей таблице показано сопоставление типов экземпляра более высокого уровня SQL Server и клиентов низкого уровня.
Тип данных SQL Server | Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровня | ODBC низкого уровня | OLEDB низкого уровня | JDBC низкого уровня | SQLCLIENT низкого уровня |
---|---|---|---|---|---|
time | чч:мм:сс | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
date | ГГГГ-ММ-ДД | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
datetime2 | ГГГГ-ММ-ДД чч:мм:сс | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
datetimeoffset | ГГГГ-ММ-ДД чч:мм:сс чч:мм | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
MS Access Data Types
Data type | Description | Storage |
---|---|---|
Text | Use for text or combinations of text and numbers. 255 characters maximum | |
Memo | Memo is used for larger amounts of text. Stores up to 65,536 characters. Note: You cannot sort a memo field. However, they are searchable | |
Byte | Allows whole numbers from 0 to 255 | 1 byte |
Integer | Allows whole numbers between -32,768 and 32,767 | 2 bytes |
Long | Allows whole numbers between -2,147,483,648 and 2,147,483,647 | 4 bytes |
Single | Single precision floating-point. Will handle most decimals | 4 bytes |
Double | Double precision floating-point. Will handle most decimals | 8 bytes |
Currency | Use for currency. Holds up to 15 digits of whole dollars, plus 4 decimal places. Tip: You can choose which country’s currency to use | 8 bytes |
AutoNumber | AutoNumber fields automatically give each record its own number, usually starting at 1 | 4 bytes |
Date/Time | Use for dates and times | 8 bytes |
Yes/No | A logical field can be displayed as Yes/No, True/False, or On/Off. In code, use the constants True and False (equivalent to -1 and 0). Note: Null values are not allowed in Yes/No fields | 1 bit |
Ole Object | Can store pictures, audio, video, or other BLOBs (Binary Large OBjects) | up to 1GB |
Hyperlink | Contain links to other files, including web pages | |
Lookup Wizard | Let you type a list of options, which can then be chosen from a drop-down list | 4 bytes |
❮ Previous
Next ❯
How Does It Work?
Syntax
A is created by appending to the end of the integer or by calling the constructor.
const theBiggestInt = 9007199254740991n; const alsoHuge = BigInt(9007199254740991); // 9007199254740991n const hugeButString = BigInt('9007199254740991'); // 9007199254740991n
Example: Calculating Primes
function isPrime(p) { for (let i = 2n; i * i <= p; i++) { if (p % i === 0n) return false; } return true; } // Takes a BigInt as an argument and returns a BigInt function nthPrime(nth) { let maybePrime = 2n; let prime = 0n; while (nth >= 0n) { if (isPrime(maybePrime)) { nth -= 1n; prime = maybePrime; } maybePrime += 1n; } return prime; }
Operators
You can use , , , and with s, just like with s.
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991 const maxPlusOne = previousMaxSafe + 1n; // 9007199254740992n const theFuture = previousMaxSafe + 2n; // 9007199254740993n, this works now! const multi = previousMaxSafe * 2n; // 18014398509481982n const subtr = multi – 10n; // 18014398509481972n const mod = multi % 10n; // 2n const bigN = 2n ** 54n; // 18014398509481984n bigN * -1n // –18014398509481984n
The operator also work as expected with whole numbers. However, since these are s and not s, this operation will round towards 0, which is to say, it will not return any fractional digits.
const expected = 4n 2n; // 2n const rounded = 5n 2n; // 2n, not 2.5n
Comparisons
A is not strictly equal to a , but it is loosely so.
0n === // false 0n == // true
s and s may be compared as usual.
1n < 2 // true 2n > 1 // true 2 > 2 // false 2n > 2 // false 2n >= 2 // true
They may be mixed in arrays and sorted.
const mixed = 4n, 6, -12n, 10, 4, , 0n; // mixed.sort(); //
Conditionals
A behaves like a in cases where it is converted to a : , , , , .
if (0n) { console.log('Hello from the if!'); } else { console.log('Hello from the else!'); } // "Hello from the else!" 0n || 12n // 12n 0n && 12n // 0n Boolean(0n) // false Boolean(12n) // true !12n // false !0n // true
Other API Notes
const view = new BigInt64Array(4); // view.length; // 4 view; // 0n view = 42n; view; // 42n // Highest possible BigInt value that can be represented as a // signed 64-bit integer. const max = 2n ** (64n - 1n) - 1n; view = max; view; // 9_223_372_036_854_775_807n view = max + 1n; view; // -9_223_372_036_854_775_808n // ^ negative because of overflow
Тип данных SQL_VARIANT
Тип данных SQL_VARIANT можно использовать для хранения значений разных типов одновременно, таких как числовые значения, строки и даты. (Исключением являются значения типа TIMESTAMP.) Каждое значение столбца типа SQL_VARIANT состоит из двух частей: собственно значения и информации, описывающей это значение. Эта информация содержит все свойства действительного типа данных значения, такие как длина, масштаб и точность.
Для доступа и отображения информации о значениях столбца типа SQL_VARIANT применяется функция SQL_VARIANT_PROPERTY.
Объявлять тип столбца как SQL_VARIANT следует только в том случае, если это действительно необходимо. Например, если столбец предназначается для хранения значений разных типов данных или если при создании таблицы тип данных, которые будут храниться в данном столбце, неизвестен.