【问题标题】:SQL Server 2008: PIVOT throwing an error 'The conversion of the varchar value 'xxx' overflowed an int column.'SQL Server 2008:PIVOT 引发错误“varchar 值 'xxx' 的转换溢出了一个 int 列。”
【发布时间】:2011-11-02 05:55:03
【问题描述】:

在使用 UDF 将 CSV 字段转换为表后,我正在使用 SQL Server 2008 PIVOT 函数。

为了显示此错误,我取消了第一步,即CROSS APPLY将 CSV 字段添加到 UDF 以获取我在下面的代码示例中手动创建的表。

CREATE TABLE #TCMDRES (
    SYS_NR BIGINT,
    DAT_TE VARCHAR(150),
    ID CHAR(1)
)

-- ,,,,,,WIN ASDF v2,20100406.BAK,32515325772,32514331136,
-- After being separated and put into columns 1-11...
INSERT INTO #TCMDRES
VALUES(1,'','X'),(2,'','X'),(3,'','X'),(4,'','X'),(5,'','X'),(6,'','X'),(7,'WIN ASDF v2','X'),
(8,'20100406.BAK','X'),(9,'32515325772','X'),(10,'32514331136','X'),(11,'','X')

SELECT *
FROM #TCMDRES

-- This errors out with:
-- Msg 248, Level 16, State 1, Line 16
-- The conversion of the nvarchar value '32514331136' overflowed an int column.
SELECT ID, [8] AS FIL_NA, [10] AS FIL_SZ_NR
FROM
    (
    SELECT DAT_TE, SYS_NR, ID
    FROM #TCMDRES a 
    ) a
PIVOT (MAX(DAT_TE) FOR SYS_NR IN ([8],[10])) AS pvt
WHERE [10] <> 0

DELETE FROM #TCMDRES

-- Try again but drop the last two digits from column 10...
INSERT INTO #TCMDRES
VALUES(1,'','X'),(2,'','X'),(3,'','X'),(4,'','X'),(5,'','X'),(6,'','X'),(7,'WIN ASDF v2','X'),
(8,'20100406.BAK','X'),(9,'32515325772','X'),(10,'325143311','X'),(11,'','X')

SELECT ID, [8] AS FIL_NA, [10] AS FIL_SZ_NR
FROM
    (
    SELECT DAT_TE, SYS_NR, ID
    FROM #TCMDRES a 
    ) a
PIVOT (MAX(DAT_TE) FOR SYS_NR IN ([8],[10])) AS pvt
WHERE [10] <> 0

DROP TABLE #TCMDRES

总而言之,如果您尝试在较大的值上使用PIVOT,即使它存储为VARCHAR,尝试将其转换为INT 也会失败。

是否有人对如何解决此问题或是否可以解决有任何想法?似乎是PIVOT 函数的限制...

【问题讨论】:

  • 我明白错误在说什么,但为什么 PIVOT 试图将 VARCHAR 转换为 INT?
  • +1 用于发布可用代码。我一直很感激拥有可用的测试数据,这让它变得如此简单!

标签: sql tsql sql-server-2008 pivot


【解决方案1】:

这是您的 WHERE 子句。 0INT。试试这个(为我测试):

WHERE [10] &lt;&gt; CAST(0 as bigint)

或者,根据Lamak

另一种方式是WHERE [10] &lt;&gt; '0'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多