Sql server 2008 我可以用数字代替BIGINT吗?

Sql server 2008 我可以用数字代替BIGINT吗?,sql-server-2008,Sql Server 2008,我有一个列为的旧数据库表,类型为BIGINT。有许多存储过程和视图使用该表和该列 出于某种原因,我需要将该列的类型更改为NUMERIC(38,0) 这样做安全吗?我是否应该强制转换任何存储过程并查看现有的BIGINT到NUMERIC(38,0)?根据我的说法,数值数据类型与十进制相同,十进制表示一个固定精度的数字,它将从-10^38+1到10^38-1 我不认为您提到的数字类型使用的是固定精度的数字,因此BIGINT可能是存储数字的最有效方法,特别是如果您希望在应用程序中执行某些计算 我看不出使

我有一个列为的旧数据库表,类型为
BIGINT
。有许多存储过程和视图使用该表和该列

出于某种原因,我需要将该列的类型更改为
NUMERIC(38,0)


这样做安全吗?我是否应该强制转换任何存储过程并查看现有的
BIGINT
NUMERIC(38,0)

根据我的说法,数值数据类型与十进制相同,十进制表示一个固定精度的数字,它将从
-10^38+1
10^38-1

我不认为您提到的数字类型使用的是固定精度的数字,因此
BIGINT
可能是存储数字的最有效方法,特别是如果您希望在应用程序中执行某些计算

我看不出使用这些数字进行计算有任何实际用途,因此您甚至可以使用适当长度的字符串,这需要数据库中更多的空间,但您可以允许在数字中分组字符

使用
BIGINT
数据类型而不是字符串,可以创建有效的索引

当你写的时候,你已经使用了数字数据类型,因此如果你升级到SQL88R2/2,你应该考虑切换到<代码> BigIt<代码>,因为你不需要分数。

BIGINT
数据类型用于整数值可能超过int数据类型支持的范围时

编辑:

您可以将数据类型从BIGINT更改为NUMERIC(38,0),但请确保在转换时不应出现人工溢出错误。

是的,确实如此

根据一个
数字(38,0)
比一个
bigint
具有更高的容量

我根据矩阵中的数字计算了最大值:

9223372036854775808(
bigint
,2^63-1,8字节)

10000000000000000000000000000000(
数字(38,0)
,10^38–1,17字节)


您应该记住,任何将
bigint
作为参数的过程,或者其中包含一个与
bigint
类型严格相关的变量,并且您对其进行更改的过程—有些过程可能会停止工作。函数内部的查询优化也是如此。我认为在更改列类型后应该重新创建现有视图。我理解这一点。但是,我可以简单地将列的类型从BIGINT更改为NUMERIC(38,0)或DECIMAL(38,0)吗不涉及使用旧BIGINT列的所有存储过程和视图?有关数据类型之间可能的转换,请参阅。@tesicg:需要更多帮助吗?我已经查看了该表,它表明数值/十进制和BIGINT之间存在隐式转换。据我所知,我可以将该列重新定义为数字或十进制,而不是bigint,但我仍然不确定是否应该更改引用该列的存储过程和视图。您可能会遇到溢出的风险,因此最好在所有位置都使用相同的数据类型。我需要将列的类型从BIGINT更改为NUMERIC(38,0)或DECIMAL(38,0),因为它表示条形码。我不能使用BIGINT,因为条形码可以是20个字符或更多。在这种情况下,您可以更改它