Sql server 2008 使用表值函数进行基转换时出错
我在运行表值函数处理大约50000条记录时遇到算术溢出错误 错误:“int类型的算术溢出错误,值=2147483648.000000” 当我使用标量函数时,我没有同样的问题。我想知道我是否能克服这个问题 我从你那里得到了baseconversion的代码 下面是我的内联函数和标量函数。Nums表有一个名为n的bigint字段。它有200000行Sql server 2008 使用表值函数进行基转换时出错,sql-server-2008,sql-server-2008-r2,Sql Server 2008,Sql Server 2008 R2,我在运行表值函数处理大约50000条记录时遇到算术溢出错误 错误:“int类型的算术溢出错误,值=2147483648.000000” 当我使用标量函数时,我没有同样的问题。我想知道我是否能克服这个问题 我从你那里得到了baseconversion的代码 下面是我的内联函数和标量函数。Nums表有一个名为n的bigint字段。它有200000行 --- --- Inline --- CREATE FUNCTION dbo.ConvertFromBase (@val
---
--- Inline
---
CREATE FUNCTION dbo.ConvertFromBase
(@val AS VARCHAR(63))
RETURNS TABLE
RETURN
(SELECT SUM(
(CHARINDEX(
SUBSTRING(@val, LEN(@val) - n + 1, 1),
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') - 1)
*POWER(2, n-1) ) AS Value
FROM Nums
WHERE n <= LEN(@val));
---
--- Scalar
---
CREATE FUNCTION dbo.fn_ConvertFromBase
(@val AS VARCHAR(63), @base AS int)
RETURNS BIGINT
BEGIN
DECLARE @RESULT BIGINT
SELECT @result =SUM(
(CHARINDEX(
SUBSTRING(@val, LEN(@val) - n + 1, 1),
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') - 1)
*POWER(@base, n-1))
FROM Nums
WHERE n <= LEN(@val)
RETURN @result
这个
不工作(产生算术溢出错误)。但是这个
SELECT POWER(CAST(2 AS bigint), 31)
@base
参数在存在的两个函数中具有不同的类型。问题在于其中一个参数是int
,而另一个,正如您所说,它的工作原理是@base
,因为bigint
似乎与我的发现非常一致,我想。我想您需要在求和表达式中对bigint进行转换?我已经尝试过了,但是,这不起作用。它似乎与我应用该函数的表上的行数有关。我不知道它在哪一点断裂。它的工作原理很好,表中的记录数少于20亿行吗?不,在任何给定的时间里,我只有80000行。有两种含义:最长的字符串和最大的数字——当然应该是相同的,这取决于实际存储的有效数字的数量)。
SELECT * FROM dbo.FinalBitmapTable
CROSS APPLY dbo.ConvertFromBase(fINALBitmap,2) b
SELECT POWER(2, 31)
SELECT POWER(CAST(2 AS bigint), 31)
----------
2147483648