asp 게시판 만들 때 게시판의 모든 컬럼정보 확인할 수 있는 프로시저(SP)

2009. 9. 15. 12:01


  /*   
exec tn 'Board'   
*/ 

CREATE   Procedure tn    --TableName의 약어로 한거니 본인 편한 이름으로 수정..
   
@tablename  varchar(100)   
   
as   
   
declare @table_name  nvarchar(384), @viewtype   varchar(20)   
set @table_name = @tablename -- 테이블명   
set @viewtype = 'vbcmd'  -- spparam=저장프로시저파라미터, vbfn=ADODB.Command 파미터, vbcmd=ADODB.Command 파미터   
   
 if(@viewtype is null or len(@viewtype) = 0)   
 begin   
  select   
  a1.name   
  , a2.name as typename   
  , a1.length   
  , NULLABLE = convert(smallint, ColumnProperty (a1.id, a1.name, 'AllowsNull'))   
  from syscolumns a1, systypes a2   
  where a1.id = object_id(@table_name)   
  and a1.xtype = a2.xtype   
  order by colid asc   
 end   
 else if(@viewtype = 'spparam')   
 begin   
  select   
  ',@' + a1.name   
  + '     ' + a2.name   
  + case   
   when a2.name = 'binary'   
    or a2.name = 'char'   
    or a2.name = 'nchar'   
    or a2.name = 'nvarchar'   
    or a2.name = 'varbinary'   
    or a2.name = 'varchar' then '(' + convert(varchar, a1.length) + ')'   
   else ''   
    end typelength   
  from syscolumns a1, systypes a2   
  where a1.id = object_id(@table_name)   
  and a1.xtype = a2.xtype   
  order by colid asc   
 end   
 else if(@viewtype = 'vbfn')   
 begin   
  select   
  'ByVal ' + a1.name + ', _'   
  from syscolumns a1, systypes a2   
  where a1.id = object_id(@table_name)   
  and a1.xtype = a2.xtype   
  order by colid asc   
 end   
 else if(@viewtype = 'vbcmd')   
 begin   
  select   
  'ByVal ' + a1.name + ', _',   
  '.Parameters.Append .CreateParameter("' + a1.name   
  + '", '   
  + case a2.name   
   when 'bigint' then 'adBigInt'   
   when 'binary' then 'adBinary'   
   when 'bit' then 'adBoolean'   
   when 'char' then 'adChar'   
   when 'datetime' then 'adDate'   
   when 'decimal' then 'adDecimal'   
   when 'float' then 'adSingle'   
   when 'int' then 'adInteger'   
   when 'money' then 'adCurrency'   
   when 'nchar' then 'adChar'   
   when 'ntext' then 'adLongVarChar'   
   when 'numeric' then 'adNumeric'   
   when 'nvarchar' then 'adVarChar'   
   when 'real' then 'adSingle'   
   when 'smalldatetime' then 'adDate'   
   when 'smallint' then 'adSmallInt'   
   when 'smallmoney' then 'adCurrency'   
   when 'sql_variant' then 'adVariant'   
   when 'text' then 'adLongVarChar'   
   when 'timestamp' then 'adDBTimeStamp'   
   when 'tinyint' then 'adTinyInt'   
   when 'varbinary' then 'adVarBinary'   
   when 'varchar' then 'adVarChar'   
   else '?' + a2.name   
    end   
  + ', adParamInput, '   
  + case   
   when a2.name = 'binary'   
    or a2.name = 'char'   
    or a2.name = 'nchar'   
    or a2.name = 'nvarchar'   
    or a2.name = 'varbinary'   
    or a2.name = 'varchar' then convert(varchar, a1.length)   
   when a2.name = 'ntext'   
    or a2.name = 'text' then 'LenB(' + a1.name + ')'   
   else '0'   
    end   
  + ', ' + a1.name + ')'   
   , a1.name 
   , ',@' + a1.name   
  + '     ' + a2.name   
  + case   
   when a2.name = 'binary'   
    or a2.name = 'char'   
    or a2.name = 'nchar'   
    or a2.name = 'nvarchar'   
    or a2.name = 'varbinary'   
    or a2.name = 'varchar' then '(' + convert(varchar, a1.length) + ')'   
   else ''   
    end typelength   
     , ',@' + a1.name 
     , a1.NAME + ' = Trim(Request("' + a1.NAME + '"))' 
     , a1.NAME + ' = Trim(objRs("' + a1.NAME + '"))' 
     , 'dicParams.Add "' + a1.NAME + '", ' + a1.NAME 
  from syscolumns a1, systypes a2   
  where a1.id = object_id(@table_name)   
  and a1.xtype = a2.xtype   
  order by colid asc   
 end    
    

텍사스양 일상에서