开放的设计思路-数据库建表接口
实现数据库表单的动态设计早已不是什么新鲜事儿,但为了完整性,大家也别嫌烦了。嘿嘿,多谢谢关照。
平台是通过存储过程完成,添加,修改,删除三个存储过程,下面分享给大家。
一、创建表单
1
CREATE PROCEDURE [pfuncCreateTable]
2
@TableName nvarchar(100),
3
@TableID nvarchar(6)
4
AS
5
Declare @Sql Nvarchar(200)
6
Declare @returnvalue char(20)
7
Declare @TranName varchar(20)
8
Select @TranName='MyTransaction'
9
begin TRANSACTION @TranName
10
if exists (select * from dbo.sysobjects where id = object_id(N'crt_'+@TableID+'_'+@TableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
11
begin
12
ROLLBACK TRANSACTION MyTransaction
13
RETURN 1--要创建的表已经存在了。
14
end
15
else
16
begin
17
set @Sql='
18
create table crt_'+@TableID+'_'+@TableName+'(tfuncID int IDENTITY (1, 1) NOT NULL primary key clustered) '
19
exec(@Sql)
20
IF (@@error <> 0)
21
BEGIN
22
ROLLBACK TRANSACTION MyTransaction
23
RETURN 2 --创建表失败
24
END
25
else
26
begin
27
commit TRANSACTION MyTransaction
28
RETURN 3 --创建表成功
29
end
30
31
end
32
CREATE PROCEDURE [pfuncCreateTable]2
@TableName nvarchar(100),3
@TableID nvarchar(6)4
AS5
Declare @Sql Nvarchar(200)6
Declare @returnvalue char(20)7
Declare @TranName varchar(20)8
Select @TranName='MyTransaction'9
begin TRANSACTION @TranName10
if exists (select * from dbo.sysobjects where id = object_id(N'crt_'+@TableID+'_'+@TableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1)11
begin12
ROLLBACK TRANSACTION MyTransaction13
RETURN 1--要创建的表已经存在了。 14
end15
else16
begin17
set @Sql=' 18
create table crt_'+@TableID+'_'+@TableName+'(tfuncID int IDENTITY (1, 1) NOT NULL primary key clustered) '19
exec(@Sql)20
IF (@@error <> 0)21
BEGIN22
ROLLBACK TRANSACTION MyTransaction23
RETURN 2 --创建表失败24
END25
else26
begin27
commit TRANSACTION MyTransaction28
RETURN 3 --创建表成功29
end30
31
end32

大家看到了,这个过程里有一个已知的字段tfuncID,再没有其他字段。这个字段非常重要,它也成了平台的一个已知条件。
二、修改表单
1
CREATE PROCEDURE [pfuncAlterTable]
2
@TableName nvarchar(100),
3
@OldTableName nvarchar(100),
4
@TableID nvarchar(6)
5
AS
6
Declare @Sql Nvarchar(200)
7
Declare @returnvalue char(20)
8
Declare @TranName varchar(20)
9
Select @TranName='MyTransaction'
10
begin TRANSACTION @TranName
11
if exists (select * from dbo.sysobjects where id = object_id(N'crt_'+@TableID+'_'+@OldTableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
12
begin
13
ROLLBACK TRANSACTION MyTransaction
14
RETURN 1--要创建的表已经存在了。 ----sp_rename @objname = crt_'+@TableID+'_'+@TableName+' @newname = crt_'+@OldTableName
15
end
16
else
17
begin
18
set @Sql='
19
sp_rename @objname=crt_'+@OldTableName+' , @newname=crt_'+@TableID+'_'+@TableName
20
exec(@Sql)
21
IF (@@error <> 0)
22
BEGIN
23
ROLLBACK TRANSACTION MyTransaction
24
RETURN 2 --更新表失败
25
END
26
else
27
begin
28
commit TRANSACTION MyTransaction
29
RETURN 3 --更新表成功
30
end
31
32
end
33
34
CREATE PROCEDURE [pfuncAlterTable]2
@TableName nvarchar(100),3
@OldTableName nvarchar(100),4
@TableID nvarchar(6)5
AS6
Declare @Sql Nvarchar(200)7
Declare @returnvalue char(20)8
Declare @TranName varchar(20)9
Select @TranName='MyTransaction'10
begin TRANSACTION @TranName11
if exists (select * from dbo.sysobjects where id = object_id(N'crt_'+@TableID+'_'+@OldTableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1)12
begin13
ROLLBACK TRANSACTION MyTransaction14
RETURN 1--要创建的表已经存在了。 ----sp_rename @objname = crt_'+@TableID+'_'+@TableName+' @newname = crt_'+@OldTableName15
end16
else17
begin18
set @Sql=' 19
sp_rename @objname=crt_'+@OldTableName+' , @newname=crt_'+@TableID+'_'+@TableName20
exec(@Sql)21
IF (@@error <> 0)22
BEGIN23
ROLLBACK TRANSACTION MyTransaction24
RETURN 2 --更新表失败25
END26
else27
begin28
commit TRANSACTION MyTransaction29
RETURN 3 --更新表成功30
end31
32
end33

34

1
2
三、删除表单
3
CREATE PROCEDURE [pfuncDropTable]
4
@TableName nvarchar(100),
5
@TableID nvarchar(6)
6
AS
7
declare @Sql nvarchar(1000)
8
Declare @TranName varchar(20)
9
Select @TranName='MyTransaction'
10
begin TRANSACTION @TranName
11
12
if not exists (select * from dbo.sysobjects where id = object_id(N'crt_'+@TableID+'_'+@TableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
13
begin
14
ROLLBACK TRANSACTION MyTransaction
15
RETURN 0 --要删除的表不存在
16
end
17
else
18
begin
19
set @Sql='
20
DROP TABLE crt_'+@TableID+'_'+@TableName
21
EXEC(@Sql)
22
23
IF (@@error <> 0)
24
BEGIN
25
ROLLBACK TRANSACTION MyTransaction
26
RETURN 1 --删除表失败
27
END
28
else
29
begin
30
commit TRANSACTION MyTransaction
31
RETURN 2 --删除表成功
32
end
33
end
34
35

2
三、删除表单3
CREATE PROCEDURE [pfuncDropTable]4
@TableName nvarchar(100),5
@TableID nvarchar(6)6
AS7
declare @Sql nvarchar(1000)8
Declare @TranName varchar(20)9
Select @TranName='MyTransaction'10
begin TRANSACTION @TranName11
12
if not exists (select * from dbo.sysobjects where id = object_id(N'crt_'+@TableID+'_'+@TableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1)13
begin14
ROLLBACK TRANSACTION MyTransaction15
RETURN 0 --要删除的表不存在16
end17
else18
begin19
set @Sql='20
DROP TABLE crt_'+@TableID+'_'+@TableName21
EXEC(@Sql)22
23
IF (@@error <> 0)24
BEGIN25
ROLLBACK TRANSACTION MyTransaction26
RETURN 1 --删除表失败27
END28
else29
begin30
commit TRANSACTION MyTransaction31
RETURN 2 --删除表成功32
end33
end34

35

通过调用上述三个存储过程创建的表效果如下图。
说明:crt 为固定前缀,标识为通过平台创建的表
1, 2等序号为分组的序号,即不同分组下,可以有相同的表名
后面的文字,即为创建时写入的表名。
浙公网安备 33010602011771号