T-SQL:创建触发器以将新列从一个表复制到另一个表,然后增加



我正在尝试创建一个触发器,以从另一个数据库上的一个表中复制一个从一个表中,但在同一服务器上的另一个表中,并将仅存在于表上的列中递增正在添加新行。我不确定代码是否准确,并且想要有关如何改进其的任何反馈。

CREATE TRIGGER AddReTncyTransStatement 
ON [DBAdmin].[dbo].[ReTncyTransStatement]
AFTER UPDATE, INSERT 
AS
BEGIN
    INSERT INTO [DBAdmin].[dbo].[ReTncyTransStatement]
                ([ORG-CODE], [TNCY-SYS-REF], [TRANS-NO], [PROGRESS-RECID])
        SELECT        
            [ORG-CODE],
            [TNCY-SYS-REF],
            [TRANS-NO],
            [ANALYSIS-CODE] ``,
            (SELECT MAX([PROGRESS-RECID]) 
             FROM [DBAdmin].[dbo].[ReTncyTransStatement]) + 1 AS RECID
        FROM            
            [SQLViewsPro2EOD].[dbo].[RE-TNCY-TRANS]
END;

我想您有一个名为 [RE-TNCY-TRANS]的表,该表位于 [SQLViewsPro2EOD]数据库中,另一个表是位于[DBAdmin]数据库内的[ReTncyTransStatement]

我还想您每次将记录插入[RE-TNCY-TRANS]中时,您想将记录插入[ReTncyTransStatement]。因此,要实现此目的,您需要按下以下触发器:

CREATE TRIGGER AddReTncyTransStatement
ON [SQLViewsPro2EOD].[dbo].[RE-TNCY-TRANS]
AFTER UPDATE, INSERT
AS
BEGIN
    INSERT INTO [DBAdmin].[dbo].[ReTncyTransStatement]
    (
        [ORG-CODE],
        [TNCY-SYS-REF],
        [TRANS-NO],
        [PROGRESS-RECID]
    )
    SELECT [ORG-CODE],
           [TNCY-SYS-REF],
           [TRANS-NO],
           ISNULL((
               SELECT MAX([PROGRESS-RECID]) FROM [DBAdmin].[dbo].[ReTncyTransStatement]
           ),0) + 1 AS RECID
    FROM Inserted;
END;

update

为什么我使用isnull函数?

因为第一次,[DBAdmin].[dbo].[ReTncyTransStatement]表中没有记录,因此MAX([PROGRESS-RECID])将无效。我使用ISNULL处理这种情况。

为什么我使用inserted

根据Microsoft文档:

插入的表存储插入过程中受影响行的副本 和更新语句。在插入或更新交易期间,新的 行均添加到插入的表和触发表中。这 插入表中的行是触发器中新行的副本 表。

在这里阅读更多信息:https://learn.microsoft.com/en-us/sql/relational-database/triggers/triggers/use-the-the--instered-and-deleted-tables?view = sql-server-2017

相关内容

  • 没有找到相关文章

最新更新