Сообщение 8114: Ошибка при преобразовании типа данных varchar в числовой - PullRequest
0 голосов
/ 06 апреля 2011

Я пишу динамический запрос в SSMS 2008, и я получаю вышеуказанную ошибку.В чем причина этого?

Мой запрос:

SELECT TOP 10 *
FROM 
    ALL_COMPLAINTS A
JOIN 
    #TEMP5 B ON A.QXP_EXCEPTION_NO = B.QXP_EXCEPTION_NO 
                AND A.[LEVEL] = B.[LEVEL] 
                AND A.[QXP_REPORT_DATE] = B.[QXP_REPORT_DATE]
WHERE 
    A.QXP_REPORT_DATE >= CONVERT(DATETIME, '' + @FirstMonthDate + ' 00:00:00', 102) 
    AND 
    A.QXP_REPORT_DATE <= CONVERT(DATETIME, '' + @LastMonthDate + ' 23:59:59', 102) 
    AND 
    A.QXP_SHORT_DESC <> 'Design Control' AND A.LEVEL = ' + CAST(@TheLevel AS VARCHAR(5)) + ' 

Я знаю, что A.Level является числовым, и я также знаю, что я не получаю никаких ошибок, если я просто удаляю A.Level порция.Однако я не уверен, что правильно произвожу @TheLevel, поскольку это динамический SQL.

1 Ответ

1 голос
/ 07 апреля 2011

Ваши кавычки перепутаны в последней строке, вы не можете смешивать динамический и нединамический SQL в одном выражении. Также при условии, что @TheLevel - это число, если @TheLevel - это символ, вам нужно преобразовать его в число (в этом случае, я полагаю, int)

SELECT TOP 10 *
FROM 
    ALL_COMPLAINTS A
JOIN 
    #TEMP5 B ON A.QXP_EXCEPTION_NO = B.QXP_EXCEPTION_NO 
                AND A.[LEVEL] = B.[LEVEL] 
                AND A.[QXP_REPORT_DATE] = B.[QXP_REPORT_DATE]
WHERE 
    A.QXP_REPORT_DATE >= CONVERT(DATETIME, '' + @FirstMonthDate + ' 00:00:00', 102) 
    AND 
    A.QXP_REPORT_DATE <= CONVERT(DATETIME, '' + @LastMonthDate + ' 23:59:59', 102) 
    AND 
    A.QXP_SHORT_DESC <> 'Design Control' AND A.LEVEL = @TheLevel

Если вам нужна динамическая часть, то, вероятно, рекомендуется предварительно оценить ее, а затем ввести ее в нединамический запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...