SQL Server 为相同的值创建两个类型不同的列以同时实现速度和健壮性是否是个好主意?

lf3rwulv  于 2023-01-20  发布在  其他
关注(0)|答案(2)|浏览(120)

假设我有一个包含“CustomerId”列的大型数据集,该数据来自某个外部源,在某些转换中使用,并向其他系统公开。
CustomerId实际上总是一个整数,但它被接收为字符串类型,因此理论上它可以包含非整数字符。我不想显式地将它强制转换为整数,以防止它是字符串的潜在情况,因为这会中断流,但我也想将它强制转换为整数,因为这会大大加快它的使用速度。
因此,我考虑的是创建一个CustomerId列,它是从原始值转换而来的整数,以及一个CustomerIdVarchar,它是相同的值,但具有varchar类型。除非原始值不能转换为整数,否则CustomerIdVarchar将为null。这样,对于所有意图和目的而言,前者可以以有效的方式使用,但它允许防范潜在的离群值,并避免破坏系统。
这是个好主意吗?

l5tcr1uw

l5tcr1uw1#

你说的是CustomerId is in practice always an integer,所以如果它是不能转换成INT的东西,那么一定是出了问题。
为什么要冒险插入错误的数据,这可能会导致错误?
更好的方法是在INSERT时显式地将值转换为INT,如果出现错误,则检查问题所在并解决它。

tag5nh1u

tag5nh1u2#

你不会写条件语句吗?
可以使用ISNUMERIC()函数确定CustomerID是否有效。如果给定值为数值,则返回"1",否则返回0。
例如:

DECLARE @ISNUMERIC Integer 
SET @ISNUMERIC = (SELECT ISNUMERIC(CUSTOMERID))

然后,您可以使用该变量来确定是否要将其转换为int。

相关问题