SQLOLEDB의 경우 SQLOLEDB의 버그인지는 모르겠지만
Select 의 결과 뿐만 아니라 Print문 혹은 Update나 Delete 에 의한 영향받은 레코드의 개수가
각각 1개의 커서로 인식해 Recordset 이 생성됩니다.
 
 
--************************************
ALTER Procedure Proc_Test
As
 
Print '123'                       -- (1)
Update tbl Set a = 1              -- (2)
Select 'Second' As Result         -- (3)
--************************************
 
위의 프로시저의 경우 MSDASQL Provider로 실행된 결과는 레코드셋이 1개가 생성되고
(3)의 결과만 나타납니다.
 
허나 SQLOLEDB Provider로 실행할 경우 (1), (2)의 결과도 하나의 레코드셋으로 인식을해서
레코드셋이 3개가 생성되고 NextRecordset 메쏘드를 2번더 호출해야 (3)의 결과가 나옵니다.
 
그래서 그 해결 방법이 set nocount on 을 실행하여 (1), (2)의 결과를 없애야 비로서
MSDASQL Provider처럼 동작을 합니다.
 
이 이상한 결과는 버그인지, 의도된 동작인지는 모르겠지만..
(버그라고 추측이..)
 
ADO의 SQLOLEDB Provider에서만 나타나고..
ADO.NET의 System.Data.SqlClient 나 System.Data.OleDb(Provider=SQLOLEDB) 에서는 나타나지 않습니다.
 
 
ps.
이와 비슷한 내용의 KB을 찾아볼려고 검색해 봤는데 아래와 같은 내용이 나왔는데
아래의 링크 내용은 위의 결과와 반대의 결과로 얘기를 하고 있어서..
 
이 미스터리는 계속 이어집니다. 냠..
 

'Dev > Windows' 카테고리의 다른 글

벤치마킹  (0) 2007.10.17
달라진 기능 (IIS 6.0)  (0) 2007.09.28
COM+ Queued Components  (0) 2007.08.09
SWC (Services Without Components)  (0) 2007.08.08
RestartService  (0) 2007.07.19

+ Recent posts