2016-08-31 3 views
0

SQL Server에 이상한 문제가 있습니다. 기본적으로 두 개의 열, Description 1Description 2이 포함 된 제네릭 형식 개체가 있습니다. 우리는 Description2이 숫자인지 확인하고, 그렇다면 값을 확인하거나 사용하십시오. 그러나 쿼리를 실행하려고 할 때 다음 오류가 발생합니다.SQL 서버에서 숫자가 여전히 오류인지 여부를 확인합니다.

nvarchar 값 'Test Other'를 데이터 형식 int로 변환 할 때 변환하지 못했습니다.

지금 일반적으로 단순히는 등 부적절한 값 /에 가입하려고 시도했습니다 가정,하지만 그것은 오류라고 년대 varcharISNUMERIC에서 유효하지 않을 것이다. 내가 쿼리에서 마지막 행을 제거 할 때

나에게 이상한 무엇
SELECT * 
FROM base_table 
JOIN org_type o ON o.id = base_table.org_id 
LEFT JOIN generic_object go ON go.id = base_table.org_id AND ISNUMERIC(description2) 
WHERE description2 = @orgId 
    AND base_table.id = @baseId 

, 나는 오류가 발생하지 않습니다 여기에

내 쿼리의 샘플입니다.

+0

어떻게'@ baseId'를 정의 했습니까? 데이터 유형과 값을 알려주십시오. –

+0

이 목적을 위해 값은 가변적이지만 내 시스템에서는 현재 각각 2535와 2357로 설정되어 있습니다. – Sh4d0wsPlyr

+0

보고 된 문제 값 "Test Other"가 어디에서 왔는지 알고 있습니까? –

답변

2

숫자 설명 2 레코드 만 반환하려면 인라인보기를 사용하십시오. 이렇게하면 먼저 숫자 값만 포함하는 데이터 세트를 해결해야합니다.

SELECT * 
FROM base_table 
JOIN org_type o ON o.id = base_table.org_id 
LEFT JOIN (SELECT * 
      FROM generic_object 
      WHERE isNumeric(description2)) go ON go.id = base_table.org_id 
WHERE description2 = @orgId 
    AND base_table.id = @baseId 
0

내게는 description2 = @orgId이 문제 인 것처럼 보입니다. JOIN에서 ISNUMERIC(description2)을 확인하는 경우 얻는 다른 결과는 해당 열의 숫자가 아닙니다. 따라서 Where 절은 당신에게 오류를 제공합니다. ISNUMERIC(description2) = 1을 Where 절으로 이동하십시오.

+0

시도했습니다 - 동일한 문제입니다. – Sh4d0wsPlyr

2

나는 이런 유형의 참여를 보지 못했지만 ... 나는 이것이 당신에게 원하는 결과를 가져올 것이라고 생각합니다. 먼저 참여에서 ISNUMERIC을 제거하십시오. 기본적으로 변수는 numeric 인 경우에만 description2과 비교하고, 그렇지 않으면 항상 자체와 비교하여 항상 참입니다.

WHERE ISNULL(@orgId,'') = case when ISNUMERIC(description2) = 1 then description2 else ISNULL(@orgId,'') end 
+0

이것은 저에게 도움이되는 것처럼 보입니다. 다른 쿼리 문제가 있어도 같은 시간에 나에게도 보여 줬지만 일반적인 생각은 완벽하게 작동하고 나아갈 수있었습니다. 감사합니다 – Sh4d0wsPlyr

+0

전혀 걱정하지 마 @ Sh4d0wsPlyr – scsimon

관련 문제