开放的设计思路-数据库表动态维护接口
前文已经发布过动态创建数据库的接口文件了,这一节将向大家公开动态维护表的接口,同样也是存储过程,通过程序调用存储过程实现了数据库表字段的增加、修改,删除等操作。
在修改数据库的过程,仍然支持SQLServer的应用规则,特别是对数据类型相互转换的约束,仍按照以下规则执行。
在修改数据库的过程,仍然支持SQLServer的应用规则,特别是对数据类型相互转换的约束,仍按照以下规则执行。
一、添加字段的存储过程
1
CREATE PROCEDURE [pfuncColumnsAdd]
2
@TableName nvarchar(500),
3
@ColName nvarchar(500),
4
@ColWdith nvarchar(100),
5
@DbType nvarchar(100),
6
@TableID nvarchar(6)
7
AS
8
if not exists (select * from syscolumns where id = object_id(N'crt_'+@TableId+'_'+@TableName+'') and name =@ColName)
9
begin
10
declare @Sql nvarchar(2000)
11
if @ColWdith='16'
12
begin
13
set @Sql='alter table crt_'+@TableId+'_'+@TableName+' add '+@ColName+' '+@DbType
14
end
15
else
16
begin
17
set @Sql='alter table crt_'+@TableId+'_'+@TableName+' add '+@ColName+' '+@DbType+'('+@ColWdith+') null'
18
end
19
exec(@Sql)
20
return 1--添加成功
21
end
22
23
else
24
begin
25
return 0--字段已经存在
26
end
27
28
GO
29
30

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

二、修改字段的存储过程
1
CREATE PROCEDURE [pfuncColumnsAlter]
2
@TableName nvarchar(500),
3
@ColName nvarchar(500),
4
@ColWdith nvarchar(100),
5
@DbType nvarchar(100),
6
@OldName nvarchar(500),
7
@TableID nvarchar(6)
8
AS
9
10
if exists (select * from syscolumns where id = object_id(N'crt_'+@TableId+'_'+@TableName+'') and name =@OldName)
11
begin
12
Declare @Sql nvarchar(2000)
13
--set @Sql='Alter Table crt_'+@TableId+'_'+@TableName+' Alter Column '+@OldName+' '+@DbType+'('+@ColWdith+')'
14
if @ColWdith<>'16'
15
begin
16
set @Sql='Alter Table crt_'+@TableId+'_'+@TableName+' Alter Column '+@OldName+' '+@DbType+'('+@ColWdith+')'
17
end
18
else
19
begin
20
if @DbType <> 'ntext' and @DbType<>'text'
21
begin
22
set @Sql='Alter Table crt_'+@TableId+'_'+@TableName+' Alter Column '+@OldName+' '+@DbType
23
end
24
end
25
exec(@Sql)
26
if(@ColName<>@OldName)
27
begin
28
Declare @Sql1 nvarchar(2000)
29
set @Sql1='sp_rename ''crt_'+@TableId+'_'+@TableName+'.'+@OldName+''', '''+@ColName+''''
30
exec(@Sql1)
31
end
32
RETURN 1
33
end
34
else
35
begin
36
RETURN 0 --字段已经存在
37
end
38
GO
39

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

三、删除字段的存储过程
1
CREATE PROCEDURE [pfuncColumnsDrop]
2
@TableName nvarchar(500),
3
@ColName nvarchar(500),
4
@TableID nvarchar(6)
5
AS
6
if exists (select * from syscolumns where id = object_id(N'crt_'+@TableId+'_'+@TableName+'') and name =@ColName)
7
begin
8
declare @Sql nvarchar(2000)
9
set @Sql='alter table crt_'+@TableId+'_'+@TableName+' drop column '+@ColName
10
exec(@Sql)
11
RETURN 1--删除成功
12
end
13
else
14
begin
15
RETURN 0--字段不存在
16
end
17
18
GO
19
20

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

欢迎大家讨论。