을 생산하지 EXEC 내부 INT와 VARCHAR을 연결 오류가 발생하여 정확한 결과를 제공합니다. @Val
가 INT
데이터 유형과 data type precedence의 규칙입니다은 다음 표 감안할 때 변환 오류
Conversion failed when converting the varchar value 'SELECT * FROM #T WHERE Val = ' to data type int.
때문에, EXEC
내부 쿼리가 INT
으로 변환해야합니다 :
내 가정이 오류가 발생하는 것입니다.
제 질문은 EXEC
으로 전화를 걸면 변환 오류가 발생하지 않는 이유는 무엇입니까?
참고 :
- 나는 약 sp_executesql
을 알고있다. 나는 대안을 요구하지도 않는다. 왜 오류가 발생하지 않았는지에 대한 설명을 묻는 것입니다.
- 문제는 VARCHAR
연결에 VARCHAR
을 의미로이 question에 대한 대답은 내 상황을 설명하지 않는 것 같습니다. 문자열 유형 int
에서 암시 적 변환이 허용됩니다
나는 믿을 수 없다. 이것은 구시대의 잔류 물이다. 다시 예를 들어 SQL Server 2000을 사용하면 여러 문자열을'+'함께 사용하여 EXEC 할 수 있습니다.이 문자열은 당시 varchar/nvarchar의 8000/4000 자 제한을 초과했습니다. 따라서 EXEC() 내부의'+'는 표준 문자열 연결 연산자가 아닌 것으로 믿습니다. 이 함수는 문자열 데이터 형식을 받아들이도록 지정되어 있지만 스트링 형식이 아닌 문자열 형식을 지정하고 데이터 우선 순위가 짧은 부두에서 벗어날 수 있습니다. 그러나 이것은 단지 추측이므로 대답이 아닙니다. –
비슷한 질문이 이전에 요청되었습니다. http://stackoverflow.com/questions/26135174/type-conversion-in-exec-statement – Alex
@Damien_The_Unbeliever, 매우 흥미로운 이론이 있습니다. 한 가지 관찰이 있습니다. 다음은 작동하지 않습니다. : EXEC ('SELECT'+ 3)하지만 'INT'변수와 연결하면됩니다. – Alex