2009-08-25 1 views
1

어제 시련을 벌이는 동안 EXQU()에이 쿼리를 전달할 수 없다는 것을 알게되었습니다.SQL Server에서 INT를 NVARCHAR로 변환해야하는 이유는 무엇입니까?

@SQL = @SQL + 'WHERE ID = ' + @SomeID 
EXCEC(@SQL) 

여기서 @SomeID는 INT이고 @SQL은 NVARCHAR입니다. 이것은 실행 중에 NVARCHAR을 다시 INT로 변환 할 수 없다는 것에 대해 불평 할 것입니다.

당신이

@SQL = @SQL + 'WHERE ID = ' + CONVERT(NVARCHAR(20), @SomeID) 

처럼 이해해야한다는 것을 깨달았습니다. 왜 이해가 안되나요? NVARCHAR에 간단히 + : 적용 할 때 SQL Server가 INT를 이해하지 못하는 이유는 무엇입니까? 나는 그것이 char set과 관련이 있다고 생각한다.

수정 : 일부 오타가 수정되었습니다 (일부는 누락되었습니다 : s).

답변

2

+ (문자열 병합을)

둘 개 이상의 문자 또는 이진 스트링 열, 또는 문자열 칼럼의 조합을 연결 스트링 표현식 에서 운영자은 하나의 표현식 (문자열 연산자)에 이름을 지정합니다.

식 의 데이터 유형 중 하나의 유효한 마이크로 소프트 SQL 서버 ™ 표현 이미지, ntext 또는 텍스트 데이터 형식을 제외한 문자 및 이진 데이터 형식 카테고리. 두 표현식은 모두 이어야하며 또는 하나의 표현식은 이 다른 표현식의 데이터 유형 으로 암시 적으로 변환 될 수 있어야합니다.

그래서 ... 문자열 INT의 암시 convertion이 없습니다 ... 이것은 내부 문제

+0

다음 질문은 물론 int에 문자열을 암시 적으로 변환하지 않는 이유가 될 것입니다. 그러나 나는 그걸로 그냥 살아야 할 것입니다. –

+1

너무 쉽게 오류가 발생하기 때문에 허용되지 않는 것 같습니다 (느슨한 데이터가있을 수 있습니다 (nvarchar 필드가 너무 짧습니다 ...), 같은 방법으로 C#에서 bool을 int로 캐스팅 할 수 없습니다. –

+1

INT에서 NVARCHAR 로의 암시 적 변환은 NVARCHAR에서 INT 로의 암시 적 변환과 마찬가지로 허용됩니다 (http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx에서 차트 참조). 하나의 숫자가있는 + 연산자와 다른 쪽의 char/nchar/varchar/nvarchar를 볼 때 SQL Server는 숫자 형식으로의 암시 적 변환을 시도한 다음 숫자를 문자열로 변환하는 대신에 추가 작업을 수행하고 concatinating MS와 (아마도 그들 이전의 Sybase) 한 가지 방법을 선택했는데, 다른 하나를 원한다면 명시 적 변환을 사용해야합니다. –

1

나는 확실히이 작동 말하는 게 아니에요, 나는 게시하기 전에 그것을 시도 내 SQL 관리 스튜디오 근처 아니지만,이 같은 시도 :

@SQL = @SQL + 'Where ID = ' + @SomeID 
EXEC(@SQL) 
+0

이크입니다! 그것은 오타입니다. 내 잘못이야. +1은 나를 조롱하지 않고 얼룩을지게하고 수정합니다. ;) –