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

80酷酷网    80kuku.com

  /* -----------------------------------
    产生论坛分类目录内容表过程

   -----------------------------------    */
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'

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: