<프로시저로 RecordSet 넘기기>
무심코 습관적으로 넘어가기 쉬운 SET NOCOUNT ON/OFF
RecordSet을 리턴하는 프로시저를 만들었다.
CREATE PROCEDURE dbo.getNewNumber
BEGIN
DECLARE @NEW_NUM INT
SET @NEW_NUM = 1
SELECT @NEW_NUM
END
Visual Basic에서 다음과 같이 받는다.
Dim rs as new ADODB.RecordSet
Dim strSql as String
Dim res as Long
strSql = "EXEC dbo.getNewNumber"
rs.open strSql, conn
res = rs(0)
rs.close
하지만 절대 리턴값을 받지 못할 것이다.
왜냐하면 SET NOCOUNT ON이 빠져있기 때문이다.
CREATE PROCEDURE dbo.getNewNumber
BEGIN
SET NOCOUNT ON
DECLARE @NEW_NUM INT
SET @NEW_NUM = 1
SELECT @NEW_NUM
END
SET NOCOUNT ON 이 빠져있거나 SET NOCOUNT OFF로 설정이 되어 있으면
프로시저는 항상 자신의 마지막 로직에 의해서 SELECT, UPDATE, INSERT, DELETE된 행의
갯수를 리턴하게 된다. 그 수를 받아서 'nn개의 행이 적용되었습니다.'라는 메세지를
뿌려주게 된다.
제아무리 RecordSet을 반환한다 할 지라도 실제로는 RecordSet이 넘어오지 않는 것이다.
참고사이트 = http://hsouhy.egloos.com/399641
'프로그램 개발 > DB(MSSQL)' 카테고리의 다른 글
MSSQL 날짜 데이터 형식 ( Getdate() ) 자유롭게 변환 (0) | 2017.10.12 |
---|---|
세로 데이터 가로로 회전하여 출력하기! (0) | 2017.09.04 |
MSSQL IF문 WHERE 절에서 사용하기 (0) | 2017.07.27 |
동적 쿼리 예제 (0) | 2017.07.27 |
and 연산 사이에 or (0) | 2017.07.27 |