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

2022-05-24 0 1,060

有一个表,用户需要在后台操作它,希望能对它动态进行添加删除字段。这个功能也许没有问题,但是它原有插入与更新的两个存储过程,也需要一起修改。因此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

免责声明:
1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

NICE源码网 MsSql 动态给表添加删除字段并同时修改它的插入更新存储过程 https://www.niceym.com/60443.html