动态给表添加删除字段并同时修改它的插入更新存储过程

来源:asp之家 时间:2011-12-01 10:18:28 

有一个表,用户需要在后台操作它,希望能对它动态进行添加删除字段。这个功能也许没有问题,但是它原有插入与更新的两个存储过程,也需要一起修改。因此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 @I INT = 1, @R INT = 0
SET @R = (SELECT MAX([Id]) FROM [dbo].[A])
WHILE (@I <= @R)
BEGIN
DECLARE @fName NVARCHAR(100)
IF EXISTS(SELECT [Id] FROM [dbo].[A] WHERE [Id] = @I)
BEGIN
SELECT @fName = [FieldName] FROM [dbo].[A] WHERE [Id] = @I
SET @VariableList = @VariableList + ',@' + @fName +' DECIMAL(18,4)' --动态的字段数据类型都一样
SET @FieldList = @FieldList + ',[' + @fName + ']'
SET @ValueList = @ValueList + ',@' + @fName
SET @FieldValueList = @FieldValueList + ',[' + @fName + '] = @' + @fName
END
SET @I = @I + 1
END

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]
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
DECLARE @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]
FOR DELETE
AS
BEGIN
SET NOCOUNT ON
DECLARE @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

标签:删除字段,存储过程
0
投稿

猜你喜欢

  • python元组和字典的内建函数实例详解

    2021-09-13 09:34:56
  • GoFrame基于性能测试得知grpool使用场景

    2024-05-08 10:52:24
  • JS异步宏队列与微队列原理区别详解

    2024-04-22 13:26:36
  • 用python 绘制茎叶图和复合饼图

    2023-08-04 10:34:54
  • Python 递归式实现二叉树前序,中序,后序遍历

    2022-09-22 17:38:32
  • python实现用户答题功能

    2022-01-05 21:38:02
  • 基于Python制作flappybird游戏的详细步骤

    2023-07-29 10:08:29
  • vue3.0使用mapState,mapGetters和mapActions的方式

    2023-07-02 16:49:56
  • Ext.js源码研读总结

    2009-03-04 12:06:00
  • python中列表(list)和元组(tuple)的深入讲解

    2021-08-18 01:39:02
  • Go语言原子操作及互斥锁的区别

    2024-04-26 17:23:45
  • TensorFlow实现简单的CNN的方法

    2023-09-14 14:08:50
  • 表单相关特效整理

    2013-06-29 15:42:26
  • Bootstrap组合上、下拉框简单实现代码

    2024-04-10 11:03:05
  • Centos7下安装和配置MySQL5.7.20的详细教程

    2024-01-17 06:21:13
  • python读取csv文件指定行的2种方法详解

    2022-06-06 13:35:24
  • Python 运行 shell 获取输出结果的实例

    2023-08-02 16:51:18
  • Python程序打包工具py2exe和PyInstaller详解

    2021-04-17 05:04:12
  • 使用python实现kmean算法

    2022-09-17 13:07:22
  • 使用ewebeditor可能会重复提交数据两次的解决办法

    2009-01-09 12:41:00
  • asp之家 网络编程 m.aspxhome.com