在SQL Server中指定列的长度

时间:2012-03-20 19:17:09

标签: sql-server types

列中是否有任何危险说,长度为3位的INT和一些只包含一个或两个的列?

4 个答案:

答案 0 :(得分:2)

您不能使用3位数制作INT。 INT从负20亿到正20亿,除非你(成功)使用压缩,否则需要4个字节。

您可以使用SMALLINT来节省两个字节,但为了将其保持为3位数,您需要在column < 1000处添加检查约束。除非使用压缩,否则您仍然无法再在较小的值上节省空间(例如,单个数字仍将占用2个字节)。

答案 1 :(得分:1)

Sql Server中的INT是4个字节,因此您将无法执行您所描述的操作。值的范围可以从-2,147,483,6482,147,483,647

如果您只想存储最多3位数的数字,smallint就足够了(2个字节)。

答案 2 :(得分:1)

int具有预定义的存储大小。你无法改变它。 Data Types

您可能会想到numeric or decimal,您可以在其中指定精确度。

答案 3 :(得分:1)

您可以选择使用Decimal类型,如下所示:

create table #MyTable
(
    NotOneThousand decimal(3,0)
)

insert into #MyTable select 999
insert into #MyTable select 1000 -- fails
insert into #MyTable select -999
insert into #MyTable select -1000 -- fails

select * from #MyTable

drop table #MyTable

或使用检查约束,例如:

create table #MyTable
(
    NotOneThousand smallint check (NotOneThousand between 0 and 999)
)

insert into #MyTable select -1 -- fails
insert into #MyTable select 0
insert into #MyTable select null
insert into #MyTable select 999
insert into #MyTable select 1000 -- fails

select * from #MyTable

drop table #MyTable