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表中插入创建行)。然后,我想在其他数据库中使用此统一表来更新具有质量值的记录。这些必须是网页,以便网页按需报告。
答案 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