WorkaHolic

하나의 프로시저 여러페이지에서 사용하기...

2010. 4. 8. 22:28
반응형

퀘스트님의 소름돋는 답변입니다..

출처 : ASP 뉴스그룹

 

 

 

트랜잭션 거신 이유는 잘 이해를 못해서... 걍 뺐습니다.
@spDBName을 입력받고 그걸로 테이블 이름을 결정하시는것 같은데요,
'HpvQna', 'tb2', 'tb3' 이외의 이름이 입력되면 에러처리했구요 음...

테이블 구조 없이는 코드맹글기가 넘 어려버요... ㅠㅠ
글구... 앞에 예로 들어주신 코드가 훨씬 간결하구 이해하기 쉬워 보여요.. 그쵸?
^^;


Create PROCEDURE BD_QA_Write
@spDBName varchar(20),
@spnum integer,
@spCate tinyint,
@sptitle  varchar(80),
@spwdate char(10),
@spname varchar(20)

AS
DECLARE @maxnum integer, @g_order integer, @g_level integer
DECLARE @selSql nvarchar(4000), @insSql nvarchar(4000), @tblName
nvarchar(20)

SET NOCOUNT ON
          --// 글번호 가지고 오기

      set @tblName = case @spDBName
                               when 'HpvQna' then 'QnaTBL'
                               when 'tb2' then 'QnaTBL2'
                               when 'tb3' then 'QnaTBL3'
                               else '' end

      if @tblName = '' Goto tableNameError

      set @selSql = 'SELECT @maxnum = isNULL(MAX(num),0)+1 FROM '
                            + @tblName +' where cate = @spCate'

      exec sp_executeSql @selSql, N'@maxnum int output, @spCate tinyint',
                                       @maxnum output, @spCate = @spCate

      SET @g_order =(@maxnum*100) + 99
      SET @g_level = 0

/*   ex1. exec 사용

      set @insSql = 'INSERT INTO '+ @tblName +'
         (num,g_order,g_level,title,memocnt,wdate,name,cate)
         values ('+ cast(@maxnum as varchar) +', '+ cast(@g_order as
varchar) +',
                     '+ cast(@g_level as varchar) +', '+ quotename(@sptitle,
'''') +', 0,
                     '+ quotename(@spwdate, '''') +', '+ quotename(@spname,
'''') +',
                     '+ cast(@spCate as varchar)+')'
      exec (@insSql)
*/

/* ex2. sp_executeSql 사용 */

      set @insSql = 'INSERT INTO '+ quotename(@tblName) +' (
                               num, g_order, g_level, title, memocnt,
                               wdate, name, cate
                               ) values (
                               @maxnum, @g_order, @g_level, @sptitle, 0,
                               @spwdate, @spname, @spCate)'

      exec sp_executeSql @insSql,
         N'@maxnum int, @g_order int, @g_level int, @sptitle varchar(80),
            @spwdate char(10), @spname varchar(20), @spCate tinyint',
         @maxnum=@maxnum, @g_order=@g_order, @g_level=@g_level,
@sptitle=@sptitle,
            @spwdate=@spwdate, @spname=@spname, @spCate=@spCate

/* ex2. sp_executeSql 사용예 끝 */

      Return

      tableNameError:
         RAISERROR ('테이블 이름 : ''%s'' (이)가 잘못 입력되었습니다.', 16,
1, @spDBName)
GO
반응형