Как создать пользовательские типы данных в SQL Server 2008? - PullRequest
1 голос
/ 30 сентября 2011

Я пытаюсь создать беззнаковый короткий тип данных в SQL Server, но пока все, что мне удалось, - это заставить его не допускать отрицательных значений, что приводит к напрасной трате половины моего пространства хранения. Должен быть какой-то способ создать собственный тип данных, в котором я сам управляю им. Я хотел бы иметь возможность сообщить системе, что тип данных имеет два байта, и прочитать значение определенным образом, чтобы оно считывало его в виде короткой строки. Есть идеи?

Окончательное решение:

Хорошо, ответ Натана, приведенный ниже, помог мне найти работоспособное решение. Поэтому, когда я сохраняю свое беззнаковое короткое значение в базе данных, мне просто нужно преобразовать его в подписанное короткое. Первая половина значений будет правильной. Если значение отрицательное, мне просто нужно добавить 65536 к числу. Окончательный вариант выбора выглядит так:

SELECT case when i >= 0 then i else 65536+i end
  FROM MyDatabase.dbo.testDB

Это будет правильно отображать мой неправильно брошенный неподписанный шорт. Спасибо за помощь.

1 Ответ

1 голос
/ 01 октября 2011

Редактировать: После перечитывания я вижу, что вы хотите эмулировать беззнаковое шорт (от 0 до 65 535) в 2-байтовом типе данных. Я не вижу способа использовать нативные типы в MSSQL, если вы не пошли с smallint и не выполнили математику самостоятельно.

Это просто упражнение или вы чрезмерно сосредоточены на месте для хранения? Пространство дешево!

edit: показать пример скорректированного smallint:

drop table dbo.yak

create table dbo.yak (i smallint identity(-32768, 1), n varchar(1));
go

insert into dbo.yak(n)
    values('a'),('b'),('c');
go

select i, (i+32768)+1, n 
from dbo.Yak
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...