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个字符或更多。在这种情况下,您可以更改它