저장프로시저 안에서 다른 저장프로시저를 호출하려면 크게 보자면 2가지 방법이 있습니다. Exec(EXECUTE)나 sp_executesql를 이용하면 됩니다. (참고 : MSDN - sp_executesql 사용) 이 포스팅에서는 Exec(EXECUTE)만 다루 겠습니다. 1. 리턴값이 없을때 리턴값이 없으면 그냥 호출하면 됩니다. --Exec [저장프로시저 이름] --Exec [저장프로시저 이름] [매개변수1],[매개변수2],.... Exec TestSelect @temp 2.리턴값이 있을때 리턴값은 항상 int형이므로 인티저형의 변수를 하나 선언한후 값을 대입하는 방식으로 받습니다. --Exec [값을 받을 변수] = [저장프로시저 이름] [매개변수1],[매개변수2],.... Declare @nTem..
저장 프로시저(stored procedure) 안에서 다른 저장 프로시저를 호출하려면 크게 보자면 2가지 방법이 있습니다. Exec(EXECUTE)나 sp_executesql를 이용하면 됩니다. ( 참고 : MSDN - sp_executesql 사용) 여기서는 Exec(EXECUTE)를 이용하는 방법을 설명하겠습니다. 1. 리턴값이 없을 때 리턴값이 없으면 그냥 호출하면 됩니다. --Exec [저장프로시저 이름] --Exec [저장프로시저 이름] [매개변수1],[매개변수2],.... Exec TestSelect @temp 2. 리턴값이 있을 때 리턴값은 항상 int형이므로 인티저형의 변수를 하나 선언한 후 값을 대입하는 방식으로 받습니다. --Exec [값을 받을 변수] = [저장프로시저 이름] [매개변..
뭐...당연한 이야기지만 저장프로시저에서 반복문 사용하는건 심각한 문제입니다 ㅡ.-;; 저장프로시저 안에서 반복문을 사용하는 것보다 프로그램에서 저장프로시저를 반복하여 호출하는 방식을 많이 사용하는데 어느것이 더 효율적인지는 모르겠습니다. 상황에 따라서 성능차가 있겠지만 일반적인 서버구성으로 볼때 디비에서 반복문이 돌아가는것 보다 프로그램에서 돌아가는것이 유리하긴 하죠. 그래도 이방법저방법 다 안될때는 결국 써야 하니 알아봅시다 ㅎㅎ While @nI < 10 Begin Insert Into tb_Test(nData) Values( @nI) Set @nI = @nI + 1 End 일반적인 While문의 형태를 하고 있습니다. 덕분에 제가 설명할 것이 없네요 ㅋㅋㅋ While로 시작하여 범위를 지정해주시면..
저장 프로시저를 호출했는데 결과가 여러 개 나온다는 것은 'Select'문이 여러 번 동작하거나 'return'값도 온다는 의미입니다. 1. 'select'와 'return' 구분하기 필요에 따라 'Select'로 리턴하는 값을 'Return'으로 바꾸면 됩니다. 셀랙트(Select)는 리턴(Return)과 달라 프로시저가 종료되지 않습니다. 그러니 셀랙트로 값을 리턴하면 셀랙트가 호출된 이후 뒤에 있는 코드들도 그대로 동작합니다. 셀랙트가 여러 개 있다면 결과도 여러 개 나옵니다. 만약 호출한 저장 프로시저의 셀랙트된 내용을 받고 싶지 않다면 방법이 없는 건 아닙니다. 테이블 변수나 임시 테이블을 이용하여 저장 프로시저의 내용을 받으면 셀랙트된 내용이 리턴되지 않습니다. (참고 : [MSSQL] 저장프..
이전 글에서 테이블 변수에 관해서 이야기했었습니다. 임시 테이블과 테이블 변수는 사용하는 방법 면에서는 별 차이가 없으나 성능상 차이가 있다고 합니다. 테이블 변수가 성능 면에서 더 유리하다고 하는데....직접 비교는 해보지 않아서 잘 모르겠습니다 ㅎㅎㅎ (참고 : [MSSQL] 저장프로시저에서 테이블(Table) 변수 사용하기 ) 1. 선언 선언 임시테이블이므로 크리에이트 테이블(Create Table)로 생성하면 됩니다. --리턴값을 받기위한 임시 테이블 --Create Table [생성할 테이블 이름] ( [컬럼명] [데이터형], ... , [컬럼명] [데이터형] ) Create Table #Result ( nIndex int , sName varchar(16) , sID varchar(16)) 2..
저장프로시저를 만들고 테스트해보면 메시지 "(1개 행이 영향을 받음)" 이런 메시지를 볼수 있습니다. 말그래로 저장프로시저 안에서 테이블에 영향을 주면(4대 천황같은 것을 사용하였을때) 출력됩니다. 만약 여러번 영향을 주면(select를 여러번 한다던가)하면 여러줄이 나옵니다. 그런데 이런 메시지가 서버에 부하를 준다는 군요 ㅡ.-; 그렇기 때문에 'Set Nocount on' 사용을 권장하고 있습니다. 저장프로시저의 시작점에 'Set Nocount on'를 적어 주시면 됩니다. (참고 : MSDN - SET NOCOUNT(Transact-SQL)) 예를 들면 아래와 같습니다. ALTER PROCEDURE [dbo].[TestSelect] As BEGIN Set Nocount on Select * Fro..
원격 데스크톱으로 MSSQL스트디오로 사용하다보면 저장프로시저를 디버깅할일이 있는데 이때 나는 에러 t-sql 디버깅을 시작할 수 없습니다 헐헐 MSSQL 2005부터 나는 에러라고 합니다. MSDN을 뒤저보니.. http://msdn.microsoft.com/ko-kr/library/w1bhybwz http://msdn.microsoft.com/ko-kr/library/z3bxds0s(v=VS.90).aspx 몇가지 사용자 계정을 고려해야 합니다. 응용 프로그램 계정은 Visual Studio나 클라이언트 응용 프로그램이 실행되는 사용자 계정입니다. 이 계정은 Windows 사용자 계정으로, 디버깅할 SQL Server의 sysadmin 그룹에 속해야 합니다. 연결 계정은 SQL Server에 연결하는..