2015-03-17 3 views
0

Я столкнулся с этой проблемой, пытаясь запустить SQL-запрос. Невозможно определить, где происходит преобразование в «int». Может ли кто-нибудь указать мне в правильном направлении?Ошибка преобразования

SELECT TOP 100 PERCENT 
     a.S1 as "SegNumber", 
     a.S2 as "SegmentName", 
     a.S3 as "Description", 
     a.S4 as "SegmentValue" 
FROM 
( 
    SELECT  3 as "S1", 
       LTRIM(RTRIM(b.SUMMARY_ACCT)) + '_' + 'Accounts' as "S2", 
       b.ACCOUNT_DESC as "S3", 
       '^' + LTRIM(RTRIM(c.SUMMARY_ACCT)) + '_' + 'Accounts' as "S4" 
    FROM  TEST.dbo.GLCHARTSUM b 
    inner join TEST.dbo.GLCHARTSUM c ON c.PARENT_OBJ_ID = b.SUMRY_ACCT_ID 
    UNION ALL 
    SELECT  3 as "S1", 
       LTRIM(RTRIM(c.SUMMARY_ACCT)) + '_' + 'Accounts' as "S2", 
       c.ACCOUNT_DESC as "S3", 
       LTRIM(RTRIM(convert(varchar(100),b.ACCOUNT))) as "S4" 
    FROM  TEST.dbo.GLCHARTDTL b 
    INNER JOIN TEST.dbo.GLCHARTSUM c ON c.SUMRY_ACCT_ID = b.SUMRY_ACCT_ID 
    UNION ALL 
    SELECT  2 as "S1", 
       LTRIM(RTRIM(ACCT_UNIT)) + '_' + 'Unit' as "S2" , 
       DESCRIPTION as "S3", 
       '^' + LTRIM(RTRIM(ACCT_UNIT)) + '_Unit' as "S4" 
    FROM  TEST.dbo.GLNAMES 
    WHERE  POSTING_FLAG ='S' 
    UNION ALL 
    SELECT  2 as "S1", 
       LTRIM(RTRIM(ACCT_UNIT)) + '_' + 'Unit' as "S2", 
       DESCRIPTION as "S3", 
       LTRIM(RTRIM(ACCT_UNIT)) as "S4" 
    FROM  TEST.dbo.GLNAMES 
    WHERE  POSTING_FLAG ='P' 
    UNION ALL 
    SELECT  3 as "S1", 
       MATRIX_CAT + Substring(MX_VALUE,1,5) AS "S2", 
       MX_VALUE as "S3", 
       ACCOUNT AS "S4" 
    FROM  TEST.dbo.GLACCMXVAL b 
    INNER JOIN TEST.dbo.GLCHARTDTL c ON b.OBJ_ID = c.OBJ_ID 
) a 
WHERE 1 = 1 
ORDER BY a.S2 

Ошибка:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '^ASSETS_Accounts' to data type int.

+2

Хорошо, что это совершенно нечитаемым беспорядок ... Я даже не буду пытаться расшифровать это. Вы должны отредактировать и выполнить повторную отправку с соответствующим форматированием SQL. Но сообщение об ошибке сообщает вам, где именно проблема. Каким типом является столбец ASSETS_Accounts в базе данных? – pmbAustin

+1

Я предполагаю, что это как-то связано с тем, что ваш столбец S4 не является одним и тем же типом во всех ваших 'UNION ALL' ... Вам действительно нужно работать над форматированием вашего кода. – Siyual

+0

@pmbAustin столбец ACCOUNT: pk, int, not-null) – Shaji

ответ

3

Причина вы видите эту ошибку из-за вашего последнего UNION ALL. ACCOUNT - значение INT, но другие S4 столбцы: VARCHAR.

Вы должны отдать свой ACCOUNT колонку к VARCHAR

... 
UNION ALL 
SELECT  3 as "S1", 
      MATRIX_CAT + Substring(MX_VALUE,1,5) AS "S2", 
      MX_VALUE as "S3", 
      CONVERT(VARCHAR (100), ACCOUNT) AS "S4" 
... 
+0

спасибо! Это было отличное решение! – Shaji

Смежные вопросы