zoukankan      html  css  js  c++  java
  • 动态设置表结构方案(一)

    如果想提供平台功能,以适应不同业务,引入动态设置表结构功能,怎么办呢?

    有一个方案是这样的:

    1、按照用户的配置,建立相应的物理表

    2、系统上线使用以后,有可能还会调整表结构(虽然几率不算太大,但毕竟是有这种可能)

    3、这时,应该相应修改物理表结构

    4、怎么调整呢?

    1)按照新结构,建立一张新表

    2)在当前表建立触发器,将当前表所有的增删改都同步到新表

    3)复制数据到新表

    4)通过换名,将新表置换当前表

    假设当前表为 [bigtable],新表为[bigtable.tmp]

    触发器:

    ALTER TRIGGER [dbo].[trgIns]
       ON  [dbo].[bigtable]
       AFTER INSERT
    AS 
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    
        -- Insert statements for trigger here
    	-- 将新增纪录拷贝到临时表
    	SELECT * INTO #inserted FROM INSERTED;
    
    	-- 获得当前表的字段
    	DECLARE @cols VARCHAR(MAX) = '';
    	SELECT
    		@cols = @cols + ',' + C.name
    	FROM sys.columns C
    	WHERE C.[object_id] = OBJECT_ID('[bigtable]');
    	SET @cols = SUBSTRING(@cols,2,LEN(@cols) - 1);
    
    	-- 显式插入标识列
    	SET IDENTITY_INSERT [bigtable.tmp] ON;
    	
    	-- 将增加记录从临时表拷贝至新表
    	DECLARE @sql VARCHAR(MAX) = '';
    	SET @sql = 'INSERT INTO [bigtable.tmp](' + @cols + ') SELECT ' + @cols + ' FROM #inserted';
    	EXEC(@sql);
    
    	SET IDENTITY_INSERT [bigtable.tmp] OFF;
    END

    网络限制,一片文章只能发这么多。。。,余下部分见动态设置表结构方案(二)

  • 相关阅读:
    整理:深度学习 vs 机器学习 vs 模式识别
    机器学习部分国内牛人
    图像去模糊
    删除流氓软件McAfee
    ceshi
    linux系统加快大文件的写入速度
    修改cmd的字体为Consolas字体
    gdb的可视化工具安装
    微服务编译、启动jar命令指定配置文件
    pycharm中安装可以贴图片的Markdown插件
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257936.html
Copyright © 2011-2022 走看看