【发布时间】:2018-01-11 05:35:43
【问题描述】:
对 SQL 相当陌生。我正在尝试使用 on insert 触发器将表数据从一个数据库复制到同一 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
我需要复制这些数据,以便我可以更新具有正确质量的卡车记录以进行报告等。
任何想法为什么这不能作为触发器?我读到的所有内容都说它应该可以工作。
编辑。 TruckQualityLAB 表是使用 Web 界面从 2 个不同的实验室随机更新的,因此可以在几秒钟内输入 2 或 3 条记录,因为该表是由其他 8 个产品表上的插入触发器填充的。(在在 truckqualitylab 表中插入创建行)。然后我想在另一个数据库中使用这个合并表来更新具有质量值的记录。这些必须是实时的,网页才能按需报告。
【问题讨论】:
-
您需要检查
Inserted伪表 - 其中包含新插入的行 - 这些需要存储到另一个表中 -
更新的行怎么样??
-
@marc_s,正确,我的错,删除:)
标签: sql-server tsql