激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Sql Server - 動(dòng)態(tài)給表添加刪除字段并同時(shí)修改它的插入更新存儲(chǔ)過程

動(dòng)態(tài)給表添加刪除字段并同時(shí)修改它的插入更新存儲(chǔ)過程

2019-12-11 14:24MSSQL教程網(wǎng) Sql Server

有一個(gè)表,用戶需要在后臺(tái)操作它,希望能對(duì)它動(dòng)態(tài)進(jìn)行添加刪除字段

有一個(gè)表,用戶需要在后臺(tái)操作它,希望能對(duì)它動(dòng)態(tài)進(jìn)行添加刪除字段。這個(gè)功能也許沒有問題,但是它原有插入與更新的兩個(gè)存儲(chǔ)過程,也需要一起修改。因此Insus.NET實(shí)現(xiàn)了它,因此此文會(huì)讓你了解到怎樣動(dòng)態(tài)為一個(gè)表添加刪除字段以及動(dòng)態(tài)修改它的存儲(chǔ)過程 

首先需要建一個(gè)表[A],這個(gè)表只有兩個(gè)字段,一個(gè)是[ID]自動(dòng)增長,另一個(gè)是表[B]的字段名,存儲(chǔ)的每一筆記錄,即是用戶需要操作的表[B]的字段。這個(gè)表[A]需要建添加,更新,以及刪除的存儲(chǔ)過程,方便用戶在后臺(tái)方便操作,還有重點(diǎn)部分,需要寫觸發(fā)器。如有記錄對(duì)表[A]進(jìn)行添加,更新或是刪除時(shí),它會(huì)觸發(fā)去作表[B]相應(yīng)操作,還要去修改表[B]的存儲(chǔ)過程。 

動(dòng)態(tài)修改表[B]的存儲(chǔ)過程: 

復(fù)制代碼代碼如下:


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)' --動(dòng)態(tài)的字段數(shù)據(jù)類型都一樣 
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]的插入觸發(fā)器: 

復(fù)制代碼代碼如下:


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]刪除觸發(fā)器: 

復(fù)制代碼代碼如下:


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 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 羞羞草视频| 国产91大片 | 一区在线免费视频 | 我爱我色成人网 | 一级成人毛片 | 人成免费网站 | 99久久精约久久久久久清纯 | 永久在线观看电影 | www久久艹 | 精品二区在线观看 | 99在线在线视频免费视频观看 | 中文字幕国产亚洲 | 免费观看的毛片手机视频 | 性大片性大片免费 | 国产pron| 欧产日产国产精品乱噜噜 | 奇米影视888狠狠狠777不卡 | 青青操国产 | 福利一区二区三区视频在线观看 | 免费一级毛片网站 | 亚洲视频网 | 污片视频网站 | 国产亚洲精品综合一区 | 鲁久久 | 国产精品二区高清在线 | www.91在线观看 | 依人九九 | 久久人| 免费观看黄色一级视频 | 老女人碰碰在线碰碰视频 | 亚洲精品成人久久 | 日韩视频一区二区 | 一本到免费视频 | 古装三级在线观看 | 毛片一级网站 | 毛片在线播放视频 | 91精品国产一区二区三区动漫 | 一级毛片免费观看在线 | 中文字幕精品在线视频 | 国产一区二区三区视频在线 | 亚洲视频精品在线 |