繁体中文
设为首页
加入收藏
当前位置:ASP技术首页 >> ASP基础 >> 在asp中如何创建动态表--调用如下sp_execute

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

2005-11-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:/* ----------------------------------- 产生论坛分类目录内容表过程 ----------------------------------- */ CREATE PROCEDURE sp_createnew_bbscontent @tabname varchar(200)='', @boardid int AS decla...
关键字:execute 动态 如何 asp sp

/* -----------------------------------

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

----------------------------------- */

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'

责任编辑:admin
相关文章