列中是否有任何危险说,长度为3位的INT和一些只包含一个或两个的列?
答案 0 :(得分:2)
您不能使用3位数制作INT。 INT从负20亿到正20亿,除非你(成功)使用压缩,否则需要4个字节。
您可以使用SMALLINT
来节省两个字节,但为了将其保持为3位数,您需要在column < 1000
处添加检查约束。除非使用压缩,否则您仍然无法再在较小的值上节省空间(例如,单个数字仍将占用2个字节)。
答案 1 :(得分:1)
Sql Server中的INT是4个字节,因此您将无法执行您所描述的操作。值的范围可以从-2,147,483,648
到2,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