WEB开发网
开发学院WEB开发ASP 在asp中如何创建动态表--调用如下sp_execute 阅读

在asp中如何创建动态表--调用如下sp_execute

 2002-06-12 10:24:11 来源:WEB开发网   
核心提示:/* ---产生论坛分类目录内容表过程 ---*/CREATE PROCEDURE sp_createnew_bbscontent@tabname varchar(200)='',@boardid intASdeclare @tri_inst_name nvarchar(100)declare @tri
/* -----------------------------------
  产生论坛分类目录内容表过程

  -----------------------------------  */
CREATE PROCEDURE sp_createnew_bbscontent
  @tabname varchar(200)='',
  @boardid int
AS
  declare @tri_inst_name nvarchar(100)
  declare @tri_up_name nvarchar(100)
  declare @tri_del_name nvarchar(100)
  declare @deltab nvarchar(100)
  declare @st nvarchar(2000)
  select @tri_inst_name='inst_bbsContent'+LTRIM(RTRIM(str(@Boardid)))
  select @tri_up_name='up_bbsContent'+LTRIM(RTRIM(str(@Boardid)))
  select @tri_del_name='delete_bbsContent'+LTRIM(RTRIM(str(@Boardid)))
  select @deltab='drop table '+@tabname
  if len(@tabname)=0
    return
  if exists (select * from sysobjects where id = object_id(@tabname) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    exec sp_executesql @deltab

  select @st='CREATE TABLE '+@tabname+
    '(
    AnnounceID  int  identity (1, 1)   NOT NULL ,  
    ParentID   int  default (0)    NULL ,    
    Child     int   default (0)    NULL ,    
    User_id     int         NULL ,    
    boardID    int        NULL ,    
    Topic     nvarchar (255)       NULL ,
    Body     ntext        NULL ,
    DateAndTime   datetime default  (getdate()) NULL ,
    Hits     int  default (0)    NULL ,
    Length    int  default (0)    NULL ,
    RootID     int  default (0)    NULL ,
    Layer     tinyint  default (1)    NULL ,
    Orders     int   default (0)    NULL ,
    ip     nvarchar (20) default (0)  NULL ,
    Expression   nvarchar (50)       NULL ,
    Forbid     tinyint default(0)    NULL
    )'
  exec sp_executesql @st
  
  select @st='CREATE TRIGGER '+ @tri_inst_name+' ON '+@tabname+ '
    FOR INSERT
  AS
    declare @rid integer,@pid integer
    select @pid=ParentId from inserted
    if @pid = 0
      begin
      select @rid =@@identity
      update '+ @tabname+' set rootid=@rid where AnnounceID=@rid
      end'
  exec sp_executesql @st

  select @st='CREATE TRIGGER '+ @tri_up_name+' ON '+@tabname+ '
    FOR UPDATE
  AS

    declare @pid int ,@rid int,@forbid tinyint
    if update(forbid)
       begin
      select @pid = parentid,@rid = rootid,@forbid=forbid from inserted
      /* 如果其父没有开放 则不能开放 */
      if exists ( select * from '+@tabname +' where AnnounceID = @pid and Forbid!= 0 )
          begin
        rollback transaction
        return
          end
      update '+@tabname+ ' set forbid=@forbid where rootid=@rid and parentid>@pid
        end'
    exec sp_executesql @st
  
  select @st='CREATE TRIGGER '+ @tri_del_name+' ON '+@tabname+ '
    FOR DELETE
  AS
    declare @pid int ,@rid int
    select @pid = parentid,@rid = rootid from deleted
    delete from '+@tabname +' where rootid=@rid and parentid>@pid'

Tags:asp 如何 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接