2016-07-30 3 views
1

Я пишу сценарий, который будет генерировать столбец каждого типа данных в сервере sql. Я знаю, что sql-сервер рассматривает такие вещи, как десятичные (5,1) и десятичные (5,0), как разные типы данных, однако различные ресурсы, на которые я смотрел (w3schools и справочная страница Microsoft), не дают понять, это также относится к таким вещам, как: Двоичный (длина), или datetimeoffset (0-7) и т. д. Любое понимание было бы весьма полезно.Типы данных сервера Sql

ответ

1

Я бы сказал, что ответ немного неаккуратно.

С одной стороны, в SQL Server datatypes page четко проводится различие между «типами данных, сортировкой, точностью, масштабом или длиной».

Таким образом, это означает, что сопоставления, точность, масштаб или длина - все атрибуты, отличные от типа данных.

Однако та же страница также упоминает

Больших типов данных Значения: VARCHAR (макс), NVARCHAR (макс), и VARBINARY (макс)

Так что будет означать, что добавление max в каком-то смысле изменяет тип данных. Затем у вас также есть случаи, такие как float(24), которые обрабатываются на SQL Server как отдельный тип данных real.

Какова цель этого скрипта? Простое создание столбца каждого типа данных не является полезным для себя. Для чего это? Что имеет смысл для скрипта?

+0

Из https://msdn.microsoft.com/en-us/library/ms187746.aspx: «Для десятичных и числовых типов данных SQL Server рассматривает каждую конкретную комбинацию точности и масштаба как другой тип данных». То, что считается другим типом данных, я думаю, зависит от контекста (например, физического хранения, семантики). –

+0

@ DanGuzman да, хорошая находка. –

0

Я не уверен, откуда взялась эта информация.

SQL Server определяет десятичный (x, y) тип данных - точный цифровой тип данных. Разница заключается в количестве байтов, которые она использует, и это делает ее «рассматриваемой» числовой (5,1) и числовой (5,0) как разные типы данных. Основное различие заключается в том, что требуется операция с двумя числами (добавление или любое другое), SQL Server пытается адаптироваться к точности, которая должна учитывать правильный результат.

Почти то же самое должно происходить с бинарным (x). Когда операция выполняется между различными точками, вы должны получить точность, которая должна содержать правильный результат.

Datetimeoffset (0-7) должен следовать той же логике.

0

, если вы заинтересованы только с каждым типом данных в SQL Server, вы можете получить эту информацию от INFORMATION_SCHEMA.COLUMNS вы можете запустить этот скрипт:

use my_databas 
go 

SELECT distinct 
    DATA_TYPE , 
    CHARACTER_MAXIMUM_LENGTH,  
    CHARACTER_OCTET_LENGTH,  
    NUMERIC_PRECISION , NUMERIC_SCALE 
    FROM INFORMATION_SCHEMA.COLUMNS 

заказ по 1,2,3

Edit:

в таблице sys.types содержит строку для каждой системы и определяемого пользователем типа.

Следующий запрос получить все типы данных в SQL сервере

select * 
from sys.types 
order by name 

Для десятичной/двоичных типов данных, хранилище на основе следующей таблицы:

Precision Storage bytes 
    1 - 9 5 
    10-19 9 
    20-28 13 
    29-38 17 

ссылка: decimal and numeric

Прецизионность - это максимальное общее количество десятичных цифр, которое будет храниться как слева, так и справа от десятичной точки.

, например десятичной (5,1) (Precision 6) и десятичной (5,0) (Precision 5) имеют то же хранилище 5 байт каждый

+0

Это вернет только типы данных существующих столбцов, а не все возможные типы данных в SQL Server, как я понимаю, вопрос. –

+0

Я добавил дополнительную информацию, просмотрю свое редактирование. –

Смежные вопросы