zoukankan      html  css  js  c++  java
  • 触发器insert

    USE [stalentzx]
    GO
    /****** Object: Trigger [dbo].[GZ_HISTORY_INSERT] Script Date: 2019/12/24 13:11:40 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[GZ_HISTORY_INSERT]
    ON [dbo].[ySysColumns]
    AFTER INSERT--,DELETE,UPDATE
    AS
    BEGIN
    DECLARE @TABLENAME VARCHAR(50)
    DECLARE @COLNAME VARCHAR(50)
    DECLARE @COLORDER INT
    DECLARE @COLTYPE VARCHAR(50)

    DECLARE @TABLE_SQL VARCHAR(MAX)
    DECLARE @COL_STR VARCHAR(MAX)

    SELECT @TABLENAME = TABLENAME , @COLNAME = COLNAME FROM INSERTED
    IF @TABLENAME LIKE 'GZ_PATSETDATA%' AND
    ISNUMERIC(RIGHT(@TABLENAME , 4)) = 1

    BEGIN

    SELECT * INTO #YSYSCOLUMNS FROM YSYSCOLUMNS WHERE TABLENAME = @TABLENAME

    IF EXISTS(SELECT 1 FROM YSYSCOLUMNS
    WHERE TABLENAME = 'C2' + RIGHT(@TABLENAME , 4)
    )

    BEGIN

    SET @COL_STR = ''
    SELECT @COL_STR = @COL_STR + ',' + COLNAME + ' ' +
    (CASE WHEN COLTYPE IN ('VARCHAR','CHAR')
    THEN COLTYPE + '(' + CONVERT(VARCHAR(4000) , ColWidth) + ')'

    WHEN COLTYPE IN ('DECIMAL' , 'NUMERIC')
    THEN ColType + '(' + CONVERT(VARCHAR(4000) , ColWidth) + ',' +
    CONVERT(VARCHAR(4000) , ColPrecision) + ')'
    ELSE COLTYPE
    END) +

    (CASE WHEN ISNULL(YSYSCOLUMNS.ColDefault , '') <> ''
    THEN (CASE WHEN CHARINDEX(',' , ColDefault) > 0
    THEN ' Default ' +
    SUBSTRING(ColDefault , 1 , CHARINDEX(',' , ColDefault) - 1)
    ELSE ' Default ' + ColDefault
    END)
    ELSE ''
    END)
    FROM YSYSCOLUMNS
    WHERE TABLENAME='GZ_PATSETDATA' + RIGHT(@TABLENAME , 4) AND
    COLNAME = @COLNAME AND
    COLNAME NOT IN(SELECT COLNAME FROM YSYSCOLUMNS
    WHERE TABLENAME = 'C2' + RIGHT(@TABLENAME,4) AND
    COLNAME = @COLNAME
    )

    SELECT @TABLE_SQL = 'ALTER TABLE C2' + RIGHT(@TABLENAME,4) + ' ADD ' +
    SUBSTRING(@COL_STR , 2 , 40000) + ';'

    EXEC (@TABLE_SQL)

    INSERT INTO YSYSCOLUMNS(TableName , ColName , ColOrder , ColType , ColWidth ,
    ColPrecision , ColNull , ColDefault , DisplayLabel , DisplayWidth ,
    DisplayFormat , EditFormat , ColVarify , VarifyMsg , ColVisible ,
    ColProperty , ColGroup , enus , zhtw , OtherLanguage ,
    RelationRule , colgroupOther)
    SELECT 'C2' + RIGHT(@TABLENAME , 4) , ColName , ColOrder , ColType , ColWidth ,
    ColPrecision , ColNull , ColDefault , DisplayLabel , DisplayWidth ,
    DisplayFormat , EditFormat , ColVarify , VarifyMsg , ColVisible ,
    ColProperty , ColGroup , enus , zhtw , OtherLanguage ,
    RelationRule , colgroupOther
    FROM INSERTED
    WHERE COLNAME NOT IN(SELECT COLNAME FROM YSYSCOLUMNS
    WHERE TABLENAME = 'C2' + RIGHT(@TABLENAME,4) AND
    COLNAME = @COLNAME
    )

    END

    ELSE
    BEGIN
    -----------------------------------创建历史记录物理表---------------------------------
    SET @COL_STR = ''
    SELECT @COL_STR = @COL_STR + ',' + ColName + ' ' +
    (CASE WHEN COLTYPE IN ('VARCHAR','CHAR')
    THEN COLTYPE + '(' + CONVERT(VARCHAR(4000) , ColWidth) + ')'

    WHEN COLTYPE IN ('DECIMAL' , 'NUMERIC')
    THEN ColType + '(' + CONVERT(VARCHAR(4000) , ColWidth) + ',' +
    CONVERT(VARCHAR(4000) , ColPrecision) + ')'
    ELSE COLTYPE
    END) +

    (CASE WHEN ISNULL(YSYSCOLUMNS.ColDefault , '') <> ''
    THEN (CASE WHEN CHARINDEX(',' , ColDefault) > 0
    THEN ' Default ' +
    SUBSTRING(ColDefault , 1 , CHARINDEX(',' , ColDefault) - 1)
    ELSE ' Default ' + ColDefault
    END)
    ELSE ''
    END)
    FROM YSYSCOLUMNS
    WHERE TABLENAME='GZ_PATSETDATA' + RIGHT(@TABLENAME,4)

    SELECT @TABLE_SQL = 'CREATE TABLE C2' + RIGHT(@TABLENAME,4) +
    ' (' + SUBSTRING(@COL_STR , 2 , 40000) + ');'
    EXEC (@TABLE_SQL)

    ------由于不存在任何对应的历史表薪资项栏位描述信息,所以需建立对应的历史表描述
    SELECT * INTO #YSYSTABLES FROM YSYSTABLES
    WHERE TABLENAME = 'GZ_PATSETDATA'+ RIGHT(@TABLENAME,4)

    INSERT INTO ySysTables(TableName , TableTypeID , TableOrder , TableLabel , ACessable ,
    ACessModule , TableVisible ,PRESERE , ISUSERDISPLAY , TEAMVISIBLE , ModuleID)
    SELECT 'C2'+RIGHT(@TABLENAME,4) , 7 , TableOrder , TableLabel+'_H' , '111' ,
    '010000000000000000000000000000' , '1' , 0 , 1 , 1 , '01'
    FROM #YSYSTABLES

    ------建立对应历史表的薪资项栏位信息描述
    INSERT INTO YSYSCOLUMNS(TableName , ColName , ColOrder , ColType , ColWidth ,
    ColPrecision , ColNull , ColDefault , DisplayLabel , DisplayWidth ,
    DisplayFormat , EditFormat , ColVarify , VarifyMsg , ColVisible ,
    ColProperty , ColGroup , enus , zhtw , OtherLanguage ,
    RelationRule , colgroupOther)
    SELECT 'C2' + RIGHT(@TABLENAME , 4) , ColName , ColOrder , ColType , ColWidth ,
    ColPrecision , ColNull , ColDefault , DisplayLabel , DisplayWidth ,
    DisplayFormat , EditFormat , ColVarify , VarifyMsg , ColVisible ,
    ColProperty , ColGroup , enus , zhtw , OtherLanguage ,
    RelationRule , colgroupOther
    FROM #YSYSCOLUMNS
    END

    END

    END

  • 相关阅读:
    mysql性能优化学习笔记(1)优化目的、方向及数据库准备
    php笔试算法题:顺时针打印矩阵坐标蛇形算法
    离职了,一切从头开始
    mysql性能优化学习笔记(2)如何发现有问题的sql
    WTL的使用
    获取程序当前目录的绝对路径
    [读书笔记]《C#本质论》读书笔记
    [.NET]ConcurrentDictionary 线程安全的集合类
    RakNet中文手册
    Python SCons
  • 原文地址:https://www.cnblogs.com/1306962984wei/p/12090942.html
Copyright © 2011-2022 走看看