开放的设计思路-数据库表动态维护接口
前文已经发布过动态创建数据库的接口文件了,这一节将向大家公开动态维护表的接口,同样也是存储过程,通过程序调用存储过程实现了数据库表字段的增加、修改,删除等操作。
在修改数据库的过程,仍然支持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
CREATE PROCEDURE [pfuncColumnsAdd]2
@TableName nvarchar(500),3
@ColName nvarchar(500),4
@ColWdith nvarchar(100),5
@DbType nvarchar(100),6
@TableID nvarchar(6)7
AS8
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
begin13
set @Sql='alter table crt_'+@TableId+'_'+@TableName+' add '+@ColName+' '+@DbType14
end15
else16
begin17
set @Sql='alter table crt_'+@TableId+'_'+@TableName+' add '+@ColName+' '+@DbType+'('+@ColWdith+') null'18
end19
exec(@Sql)20
return 1--添加成功21
end22
23
else24
begin25
return 0--字段已经存在26
end27

28
GO29

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
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
AS9
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
begin16
set @Sql='Alter Table crt_'+@TableId+'_'+@TableName+' Alter Column '+@OldName+' '+@DbType+'('+@ColWdith+')'17
end18
else 19
begin20
if @DbType <> 'ntext' and @DbType<>'text'21
begin22
set @Sql='Alter Table crt_'+@TableId+'_'+@TableName+' Alter Column '+@OldName+' '+@DbType23
end24
end25
exec(@Sql)26
if(@ColName<>@OldName)27
begin28
Declare @Sql1 nvarchar(2000)29
set @Sql1='sp_rename ''crt_'+@TableId+'_'+@TableName+'.'+@OldName+''', '''+@ColName+''''30
exec(@Sql1)31
end32
RETURN 133
end 34
else 35
begin 36
RETURN 0 --字段已经存在37
end38
GO39

三、删除字段的存储过程
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
CREATE PROCEDURE [pfuncColumnsDrop]2
@TableName nvarchar(500),3
@ColName nvarchar(500),4
@TableID nvarchar(6)5
AS6
if exists (select * from syscolumns where id = object_id(N'crt_'+@TableId+'_'+@TableName+'') and name =@ColName)7
begin8
declare @Sql nvarchar(2000)9
set @Sql='alter table crt_'+@TableId+'_'+@TableName+' drop column '+@ColName 10
exec(@Sql)11
RETURN 1--删除成功12
end13
else14
begin 15
RETURN 0--字段不存在 16
end17

18
GO19

20

欢迎大家讨论。
浙公网安备 33010602011771号