SQLserver如何支持负整数存储

1. SQLserver存储负整数介绍

SQLserver存储负整数时,会使用不同的数据类型来存储负整数。在SQLserver中,负整数可以使用bigint、int、smallint和tinyint等不同的数据类型进行存储。其中,bigint可以保存-2^632^63-1范围内的负整数;int可以保存-2^312^31-1范围内的负整数;smallint可以保存-2^152^15-1范围内的负整数;tinyint可以保存0255范围内的整数,其中0表示0,1127表示1到127,128255表示-128到-1。需要注意的是,小于tinyint表示范围的负整数将会被转换为0。

2. 使用bigint存储负整数的例子

创建表

CREATE TABLE neg_int_test

(

id INT NOT NULL IDENTITY(1, 1),

neg_int BIGINT NOT NULL,

CONSTRAINT PK_neg_int_test_id PRIMARY KEY CLUSTERED (id)

)

GO

插入数据

INSERT INTO neg_int_test(neg_int)

VALUES(-9223372036854775808), (-100), (-1), (0)

GO

在上面的例子中,我们创建了一个表neg_int_test,其中包含一个id列和一个neg_int列。在插入数据时,我们向neg_int列中分别插入了4个负整数:-9223372036854775808-100-10

查询数据

SELECT * FROM neg_int_test

GO

查询得到的结果如下:

id neg_int
1 -9223372036854775808
2 -100
3 -1
4 0

从查询结果可以看出,SQLserver可以正确地存储和查询负整数。

3. 使用smallint和tinyint存储负整数的例子

对于smallint和tinyint数据类型,存储负整数时需要注意数值的范围。在下面的例子中,我们使用smallint和tinyint分别存储负整数。

创建表

CREATE TABLE neg_int_test_2

(

id INT NOT NULL IDENTITY(1, 1),

neg_int_small SMALLINT NOT NULL,

neg_int_tiny TINYINT NOT NULL,

CONSTRAINT PK_neg_int_test_2_id PRIMARY KEY CLUSTERED (id)

)

GO

插入数据

INSERT INTO neg_int_test_2(neg_int_small, neg_int_tiny)

VALUES(-32768, -128), (-100, -50), (-1, -1), (0, 0)

GO

在上面的例子中,我们创建了一个表neg_int_test_2,其中包含一个id列,一个neg_int_small列和一个neg_int_tiny列。在插入数据时,我们向neg_int_small列中分别插入了4个负整数:-32768-100-10;向neg_int_tiny列中分别插入了4个负整数:-128-50-10

查询数据

SELECT * FROM neg_int_test_2

GO

查询得到的结果如下:

id neg_int_small neg_int_tiny
1 -32768 0
2 -100 206
3 -1 255
4 0 0

从查询结果可以看出,用smallint和tinyint存储负整数时需要注意数值范围的限制,同时也可以看出在插入负整数时,大于tinyint表示范围但小于smallint表示范围的负整数会被转换为0。

数据库标签