2011-08-23 4 views
2

UDF를 사용하여 CSV 필드를 테이블로 변환 한 후 SQL Server 2008 PIVOT 함수를 사용하고 있습니다. 이 오류를 보여주는 목적 SQL Server 2008 : PIVOT이 ''xarch '의 varchar 값 변환이 int 열을 오버플로했습니다.'

, 나는 내가 수동으로 아래 코드 예제에서 만드는거야 표를 얻기 위해 UDF에 CSV 필드를 보내고 CROSS APPLY을 첫 번째 단계를 제거하고있다. 당신이이 VARCHAR로 저장에도 큰 값에 PIVOT하려고하면
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 

은, 요약하면, 그것은 INT로 변환을 시도 실패.

누구든지 문제를 해결하는 방법이나 해결할 수있는 방법에 대한 아이디어가 있습니까? PIVOT 함수의 제한으로 보입니다 ...

+0

일 것 VARCHAR를 INT로 변환하려고합니까? – Brad

+1

+1 가능한 코드 게시. 나는 항상 유용한 테스트 데이터를 가지고있어 주셔서 감사합니다. – JNK

답변

6

당신의 WHERE 절입니다. 0INT입니다. 이 (나를 위해 테스트 일) 시도 :

WHERE [10] <> CAST(0 as bigint)

또는 Lamak 당 :

또 다른 방법은 내가 오류가 무슨 말을 이해하지만 왜 PIVOT이 WHERE [10] <> '0'

+1

+1 - 그게 또 다른 방법은'WHERE [10] <> '0'' – Lamak

+0

@ 라마 크 - 좋은 지적입니다! – JNK