使用触发器从数据库中的一个表复制到同一SQL服务器上另一个数据库上的表的精确副本

时间:2018-01-10 18:36:23

标签: sql-server tsql

SQL的新手。我正在尝试使用插入触发器将表数据从一个数据库复制到同一SQL Server实例中另一个数据库上的表完全相同。

如果我将其作为独立查询运行:

SET NOCOUNT ON;

DECLARE @IDTSMAX AS INT 

SET @IDTSMAX = (SELECT MAX(IDTS)
                FROM [LabReports].[dbo].[TruckQualityLAB])

INSERT INTO [DryPlant].[dbo].[TruckQualityLAB] (BOL, Quality, Location, Product, Date, IDTS)
    SELECT 
        BOL, Quality, Location, Product, Date, IDTS 
    FROM 
        [LabReports].[dbo].[TruckQualityLAB] 
    WHERE
        @IDTSMAX = IDTS

它工作正常,但是如果我将其创建为触发器,则会失败并且不会发生对任一表的插入。 LabReports上的主表由其他表中的8个插入触发器填充。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[TruckQualityLABUPDATE] 
ON [LabReports].[dbo].[TruckQualityLAB]
AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @IDTSMAX AS INT
    SET @IDTSMAX = (SELECT MAX(IDTS)
                    FROM [LabReports].[dbo].TruckQualityLAB])

    INSERT INTO [DryPlant].[dbo].[TruckQualityLAB](BOL, Quality, Location, Product, Date, IDTS)
        SELECT 
            BOL, Quality, Location, Product, Date, IDTS 
        FROM 
            [LabReports].[dbo].[TruckQualityLAB] 
        WHERE
            @IDTSMAX = IDTS
END

我需要复制这些数据,以便我可以更新卡车记录,并提供正确的报告质量等。

为什么这不作为触发器的任何想法?我读过的所有内容都说它应该有用。

EDIT。 TruckQualityLAB表是使用Web界面从2个不同的实验室随机更新的,因此可以在几秒钟内输入2或3条记录,因为此表是从其他8个产品表的插入触发器填充的。在truckqualitylab表中插入创建行)。然后,我想在其他数据库中使用此统一表来更新具有质量值的记录。这些必须是网页,以便网页按需报告。

1 个答案:

答案 0 :(得分:1)

你需要查看Inserted伪表 - 它包含新插入的行 - 这些行需要存储到另一个表中

ALTER TRIGGER [dbo].[TruckQualityLABUPDATE] 
ON [LabReports].[dbo].[TruckQualityLAB]
AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO [DryPlant].[dbo].[TruckQualityLAB](BOL, Quality, Location, Product, Date, IDTS)
        SELECT 
            BOL, Quality, Location, Product, Date, IDTS 
        FROM 
            Inserted
END