有乙個表,使用者需要在後台操作它,希望能對它動態進行新增刪除字段。這個功能也許沒有問題,但是它原有插入與更新的兩個儲存過程,也需要一起修改。因此insus.net實現了它,因此此文會讓你了解到怎樣動態為乙個表新增刪除字段以及動態修改它的儲存過程。
首先需要建乙個表[a],這個表只有兩個字段,乙個是[id]自動增長,另乙個是表[b]的欄位名,儲存的每一筆記錄,即是使用者需要操作的表[b]的字段。這個表[a]需要建新增,更新,以及刪除的儲存過程,方便使用者在後台方便操作,還有重點部分,需要寫觸發器。如有記錄對錶[a]進行新增,更新或是刪除時,它會觸發去作表[b]相應操作,還要去修改表[b]的儲存過程。
動態修改表[b]的儲存過程:
create
procedure
[dbo
]. [
usp_b_dymanicallyalterstoreprocedure]as
declare
@variablelist
nvarchar(
max)
=''declare
@fieldlist
nvarchar(
max)
=''declare
@valuelist
nvarchar(
max)
=''declare
@fieldvaluelist
nvarchar(
max)
=''declare
@iint
=1,
@rint=
0set
@r= (
select
max(
[id])
from
[dbo
]. [a])
while (
@i<=
@r)
begin
declare
@fname
nvarchar(
100)
ifexists(
select[id
]from
[dbo
]. [a]
where[id
]=@i)
begin
select
@fname=[
fieldname
]from
[dbo
]. [a]
where[id
]=@iset
@variablelist
=@variablelist+'
,@'+@fname+'
decimal(18,4)'--
動態的字段資料型別都一樣
set@fieldlist
=@fieldlist+'
,['+@fname+'
]'set@valuelist
=@valuelist+'
,@'+@fname
set@fieldvaluelist
=@fieldvaluelist+'
,['+@fname+'
] = @'+
@fname
endset@i=
@i+1end
declare
@sql_i
nvarchar(
max),
@sql_u
nvarchar(
max)
set@sql_i='
alter procedure [dbo].[usp_b_insert]
(@itemcode nvarchar(50) '+
@variablelist+'
)as
insert into [dbo].[b] ([itemcode]'+
@fieldlist+'
) values (@itemcode'+
@valuelist+'
)'execute sp_executesql
@sql_i;
set@sql_u='
alter procedure [dbo].[usp_b_update]
(@id int,
@itemcode nvarchar(50)'+
@variablelist+'
)as
update [dbo].[b] set [itemcode] = @itemcode'+
@fieldvaluelist+'
where [id] = @id
'execute sp_executesql
@sql_u;
表[a]的插入觸發器:
create
trigger
[dbo
]. [
tri_a_insert]on
[dbo
]. [a]
forinsert
asbegin
set nocount
ondeclare
@fieldname
nvarchar(
50)
select
@fieldname=[
fieldname
]from inserted
execute(
'if not exists(select * from syscolumns where [id] = object_id(''b
'') and [name] =
'''+
@fieldname
+'''
)
alter table [b] add ['+
@fieldname+'
] decimal(18,4) null
')
execute
[dbo
]. [
usp_b_dymanicallyalterstoreprocedure
];
end
表[a]刪除觸發器:
create
trigger
[dbo
]. [
tri_a_delete]on
[dbo
]. [a]
fordelete
asbegin
set nocount
ondeclare
@fieldname
nvarchar(
50)
select
@fieldname=[
fieldname
]from deleted
execute(
'if exists(select * from syscolumns where [id] = object_id(''b
'') and [name] =
'''+
@fieldname
+'''
)
alter table [b] drop column ['+
@fieldname+'
]')execute
[dbo
]. [
usp_b_dymanicallyalterstoreprocedure
];
end
動態給表新增刪除欄位並同時修改它的插入更新儲存過程
有乙個表,使用者需要在後台操作它,希望能對它動態進行新增刪除字段。這個功能也許沒有問題,但是它原有插入與更新的兩個儲存過程,也需要一起修改。因此insus.net實現了它,因此此文會讓你了解到怎樣動態為乙個表新增刪除字段以及動態修改它的儲存過程。首先需要建乙個表 a 這個表只有兩個字段,乙個是 id...
MySQL新增字段,修改字段,刪除字段,修改表資訊
mysql的簡單語法,常用,卻不容易記住。當然,這些sql語法在各資料庫中基本通用。下面列出 一 查詢資訊 1.登入資料庫 mysql u root p 資料庫名稱 2.查詢所有資料表 show tables 3.查詢表的字段資訊 desc 表名稱 二 修改表資訊 1.修改表名 2.修改表注釋 三 ...
Mysql 新增字段 修改字段 刪除字段
alter table 表名 add 欄位名 字段型別 字段長度 default 預設值 comment 注釋 例如 alter table order add code char 6 default null comment 優惠碼 2 修改字段 修改欄位名 字段型別 長度 a 修改欄位名 alt...