2013-08-22 1 views
-5

참조 용으로 SQL Azure를 사용하고 있습니다.SQL 서버에서 예약어 "IN"극복

번호판과 그 상태를 기반으로 테이블에서 데이터를 선택하려고 할 때 상태가 "IN"이면 결과가 반환되지 않습니다. "IN"이라는 단어가 SQL 서버에 예약되어 있음을 알았습니다. 그러나, 나는 그것을 쿼리에서 따옴표 안에 포함하고있다. 저는 현재 테스트 단계에 있으며 테이블에 287YGB와 상태 IN이있는 레코드가 하나뿐입니다.

다음과 같이 쿼리를 작성하면 아무 것도 얻을 수 없습니다.

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles WHERE tblVehicles.Lisence = '287YGB' AND tblVehicles.PlateState = 'IN' 

이렇게하면 내 결과를 얻을 수 있습니다. 그러나 이것으로는 충분하지 않습니다.

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles WHERE tblVehicles.Lisence = '287YGB' 

마지막으로,이 방법으로 쿼리를 작성하면 테이블의 유일한 행을 얻습니다.

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles 

이러한 테스트에서 매개 변수가 문제의 원인이되는 마지막 부분임을 알 수 있습니다. 나는 그것이 "IN"이라는 단어가 예약되어 있기 때문이라고 가정하고 있습니다. 이 문제를 해결할 방법이 있습니까?

+1

데이터에 선행 공백이 없거나 눈에 보이지 않는 문자가 있습니까? ''IN ''을 찾는데 아무런 문제가 없습니다. –

+0

따옴표 안에 들어 있다면 -이 문제는 없어야합니다 ... – PinnyM

+3

'IN'은 예약어입니다. ''IN''은 문자열입니다. 값 주변에 틱이 있으면 예약 된 키워드가 아닙니다. –

답변

0

예약어는 보통 문제가 발생할 시도, 그 경우 당신은 문제를 제거하기 위해 대괄호 ("")로 포장 할 필요가 . 나는 PlateState에 약간의 쓰레기가 있음을 보증 할 것이므로 먼저 그것을 자르거나 (LTRIM (PlateState) = 'IN') 또는 '% IN %'처럼 사용하면됩니다. 당신이 기대하는 결과.

+0

당신 말이 맞습니다. 내 상태 열 nvarchar 한도는 50으로 설정되었습니다. 그보다 더 낮게 제한하는 것은 좋지 않습니다. 즉, OCD로 분필하십시오. 그래서 두 자로 제한하려고했습니다. 일단 내가 원래 쿼리가 작동했다. 지금 나는 거기에 쓰레기가 무엇인지, 그리고 그것이 어디에서 소개되었는지 궁금해하고 있습니다. 내 차량을 저장하고 내 프로그램에서 PlateState 변수를 따랐을 때 나는 'IN'을 엄격하게 입력했습니다. 문자열은 항상 "IN"을 읽습니다. – Adrian

+0

@FreshPrinceOfSO "내 상태 열 nvarchar 제한이 50으로 설정되었습니다. 그보다 더 낮게 제한하는 것이 좋지 않습니다. 즉, OCD로 분필하십시오. 그래서 두 자로 제한하려고했습니다." – Adrian

+0

@Adrian "상태 약어가 2 자일 것이라는 것을 알고 있더라도 최대 50 자까지 가변 길이를 고집합니까?" – Kermit

0

는 필드 이름으로 그들을 사용하는 경우이

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles WHERE tblVehicles.Lisence = '287YGB' AND LTRIM(RTRIM(tblVehicles.PlateState)) = 'IN'