2009-11-11 3 views
2

나는 MS SQL Server가 OPENQUERY 문에서 변수를 사용할 수 없다는 것을 잘 알고 있으며 해결 방법을 알고 있습니다.OPENQUERY가 변수를 허용하지 않는 이유는 무엇입니까?

내가 알고 싶은 것은 변수 또는 연결된 문자열이 허용되지 않는 이유를 아는 사람이 있습니까?

이것은 사람들로 하여금 뛰어 내리는 원인이되어 단순히 놀랍고 EXEC 같은 다른 기능과 일치하지 않습니다.

누구든지 댓글을 달 수 있습니까? 누가 MS에 뇌물을 주어야 그 사람을 분류해야합니까?

답변

2

제한 사항은 연결된 서버가 SQL Server에 구현되는 방식과 종속 라이브러리의 작동 방식으로 인해 발생합니다. SQL 명령을 전달하는 데 사용되는 전체 라이브러리 체인이 있으며, 모두 가변 크기와 캐시 크기가 다릅니다. 제한 사항 중 일부는 OCBC 드라이버 자체에 있으므로 8k는 Microsoft의 안전한 내기입니다. 변수를 전달하는 것을 허용하지 않으면 8k 제한 규칙 만 적용됩니다.

+0

흥미 롭습니다. 왜 나는 잘릴 수있는 문자열에 대해 오류를 던질 수 없는지 알지 못합니다. 변수가 부족하여 느슨하게 느낀 이점은 확실히 길이 적용에 대한 정적 인 접근법에 비중을두고 있습니다. 이것은 이것이 그들이 물론 허용하지 않는 이유라고 가정합니다. 나는 여전히 미시시피 (Ms)의 누군가가 이것에 대해 논평하는 것을 꺼린다. – Andrew

2
declare @v1 varchar(max) 

EXEC('SELECT * FROM OPENQUERY (<linkedserver>, ''SELECT * FROM <table> WHERE <column> = ''''' + @v1 + ''''''')') 
+2

이것은 "왜?"라는 질문에 대한 대답이 아니지만 훌륭한 해결 방법입니다! – RubyTuesdayDONO

+0

결과를 테이블 변수에 넣지 않으려면 – zeocrash