SQL Server如何添加触发器以在另一个表中创建相同列

mfuanj7w  于 2023-01-25  发布在  SQL Server
关注(0)|答案(1)|浏览(144)

我正试图弄清楚如何编写一个触发器,将新创建的列添加到另一个表中。
情境:我有dbo.tableAdbo.tableA_Archive表。
当我使用以下T-SQL向dbo.TableA添加列时:

ALTER TABLE dbo.TableA 
    ADD [Column72] INT NULL

我还需要触发器将同一列添加到dbo.TableA_Archive表中。
我还没有找到任何接近这样做的例子。

qncylg1j

qncylg1j1#

由于有几个评论者决定只是嘲笑我,只有@Bogdan Sahlean贴出了任何相关的东西,我会给予他们信任,但他们没有把它作为一个答案。
以下是我根据他们的指导提出的最终解决方案。

CREATE OR ALTER TRIGGER AlterTable
ON DATABASE
AFTER ALTER_TABLE
AS
BEGIN
    DECLARE
        @lv_xml_EventData XML,
        @lv_vc_SQLCMD VARCHAR(MAX)
    SET @lv_xml_EventData = EVENTDATA()
    IF @lv_xml_EventData.value('(EVENT_INSTANCE/ObjectType)[1]','VARCHAR(200)') = 'TABLE'
    BEGIN
        DECLARE
            @lv_vc_Table_Name VARCHAR(200) = @lv_xml_EventData.value('(EVENT_INSTANCE/ObjectName)[1]','VARCHAR(200)')
            
        IF @lv_vc_Table_Name = 'TableA'
        BEGIN
            SET @lv_vc_SQLCMD = @lv_xml_EventData.value('(EVENT_INSTANCE/TSQLCommand/CommandText)[1]','VARCHAR(MAX)')
            SET @lv_vc_SQLCMD = REPLACE(@lv_vc_SQLCMD,'TableA','TableA_Archive')
            BEGIN TRY
                EXEC (@lv_vc_SQLCMD)
            END TRY
            BEGIN CATCH
                THROW;
                ROLLBACK
            END CATCH
        END
    END
END

现在我知道可能有更好的方法来做到这一点,但它确实回答了我的问题,并满足了我的需要。

相关问题