在asp中如何创建动态表--调用如下sp_executesql
发表于:2007-06-30来源:作者:点击数:
标签:
/* ----------------------------------- 产生论坛分类目录内容表过程 -----------------------------------*/ CREATE PROCEDURE sp_createnew_bbscontent @tabname varchar(200)=@#@#, @boardid int AS declare @tri_inst_name nvarchar(100) declare @tri_u
/* -----------------------------------
产生
论坛分类目录内容表过程
----------------------------------- */
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_execute
sql @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 (ge
tdate()) 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@#
exec sp_executesql @st
原文转自:http://www.ltesting.net