• 网站首页
  • 网络编程
    • PHP笔记
    • JavaScript
    • HTML
    • AJAX
    • jQuery
    • Python
  • 数据库
    • MySQL
    • SQL Server
当前位置:首页 > 数据库 > SQL Server

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

人气:45 时间:2019-11-25

这篇文章主要为大家详细介绍了SQL Server 动态给表添加删除字段并同时修改它的插入更新存储过程,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!

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

注:关于SQL Server 动态给表添加删除字段并同时修改它的插入更新存储过程的内容就先介绍到这里,更多相关文章的可以留意512笔记的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • SQL Server利用sys.sysprocesses检查SqlServer的阻塞和死锁
  • SQLServer 全文检索(full-text)语法
  • SQL Server 2000 升级到 SQLServer 2008 性能之需要注意的地方之一
  • SQL Server 一次性压缩Sqlserver2005中所有库日志的存储过程
  • SQLServer 跨库查询实现方法
  • SQL Server 数据库主键的生成方式小结(sqlserver,mysql)
  • SQL Server使用cmd命令行窗口操作SqlServer的方法
  • SQLServer 2005 实现数据库同步备份 过程-结果-分析
  • SQL Server CREATE FUNCTION sqlserver用户定义函数
  • sqlserver 查询数据库大小的方法
转载请注明出处:512笔记
本文永久地址:http://www.512pic.com/179/7982-0.html
上一篇:SQL Server SQL 比较一个集合是否在另一个集合里存在方法示例
下一篇:SQL Server SQL对时间处理的语句示例
最新文章
  • SQL Server 数据库连接字符串中的可选项收集
  • SQL Server 数据库主键选取策略
  • SQL Server SQL语句练习实例之三——平均销售等待时间
  • SQL Server 在数据库‘master’中拒绝CREATE DATABASE权限问题的解决方法
  • SQL Server 数据库附加不上解决办法
  • SQL Server Bulk Insert 只需要部分字段时的方法
  • SQL Server SQL点滴24 监测表的变化示例
  • SQL Server 获取当前日期的最大时间值
  • SQL Server 获取指定日期所在月份的第一天的代码
  • SQL Server 删除重复行的6个方法
本月热门
  • SQL Server 三种SQL分页查询的存储过程示例
  • SQL Server 触发器实例代码
  • SQL Server 得到数据库中所有表名 表字段及字段中文描述
  • SQL Server insert select与select into 的用法示例
  • SQL Server 动态给表添加删除字段并同时修改它的插入更新存储过程
  • SQL Server 动态SQL中返回数值的实现代码
  • SQL Server 合并DataTable并排除重复数据的通用用法
  • SQL Server 动态创建临时表的语句分享
  • SQL Server 在SQL触发器或存储过程中获取在程序登录的用户
  • SQL Server Execpt和not in 性能区别
  • 热门文章
    • SQL Server 格式导致的Excel导入sql出现异常的解决方法
    • SQL Server数据库性能优化三:程序操作优化提升性能
    • SQL Server 数据库备份方法菜鸟教程
    • sqlserver 复制表 复制数据库存储过程的方法
    • SQL Server 连接服务器出现错误 7391的解决方法
    • SQL Server 整理一下的排序规则
    • SQL Server 海量数据库的查询优化及分页算法方案
    • SQL Server 收缩后对数据库的使用有影响吗?
    • SQL Server 数据库管理常用的SQL和T-SQL语句
    • SQL Server数据类型及长度限制详细说明
    • SQL Server “SQL事件探查器”里表格的标题,如CPU,Read,Write,Duration,SPID.........的解释
    • SQL Server 常用代码大全
    • SQL SERVER比较一个字符串中是否含含另一个字符串中的一个字符
    • 一些SQL Server存储过程参数及例子
    • SQL Server 按关健字模糊查询,并按匹配度排序的SQL语句
    • 清除SQLServer日志的两种方法
    • SQL Server SQL语句去掉重复记录,获取重复记录
    • 精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
    • SQL Server中Linked Server及Remote Server的使用示例
    • Sql Server 保留几位小数的两种示例

All rights reserved. 512笔记. 网站地图 友情连接 招募投稿 广告服务