1
我有一个过程更新表中的x个行数。我创建了一个记录所有更新行的日志表。所以每次我运行我的程序,它会影响例如。 5行,这5行将被插入到我的日志表中。日志记录只影响sql更新过程中的行
这是我的方法:
UPDATE dbo.ImportAdvTemp
SET dbo.ImportAdvTemp.DeliveryAdrID = dbo.ImportAdvTemp_IMPORTED.DeliveryAdrID
FROM dbo.ImportAdvTemp, dbo.ImportAdvTemp_IMPORTED
WHERE
ISNULL(dbo.ImportAdvTemp.DeliveryName, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryName, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryStreet,'') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryStreet, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryHouseNumber, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryHouseNumber, '') AND
ISNULL(dbo.ImportAdvTemp.DeliverySubCity, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliverySubCity, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryPostCode, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryPostCode, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryCity, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryCity, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryCountry, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryCountry, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryCustomer, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryCustomer, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryAlias, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryAlias, '') AND
ISNULL(dbo.ImportAdvTemp.DeliveryNote, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryNote, '') AND
dbo.ImportAdvTemp.toManualProc = 1 and dbo.ImportAdvTemp.Closed = 0 and(dbo.ImportAdvTemp.DeliveryAdrID IS NULL or dbo.ImportAdvTemp.PickupAdrID IS NULL or dbo.ImportAdvTemp.DeliveryAdrID = 0 or dbo.ImportAdvTemp.PickupAdrID = 0)
我需要找出哪些行影响,然后用数据从该行我的日志表中插入。我已阅读关于使用游标,是唯一的方法来做到这一点?
我只想记录更新的行。此过程将用于自动验证记录。我将有一个目录表。该表将包含手动验证的行。如果用相同的vsalues再次插入一行,用户不必验证它,它会自动验证。那么当触发多行时,触发器如何“知道”? – Lahib 2013-04-25 06:05:17
您需要一个FOR EACH ROW触发器。它会针对每个受影响的行启动一次。但是,我在这里说Oracle,我不知道SQLSERVER是否有FOR EACH ROW触发器。 – 2013-04-25 07:23:06
并且这个触发器必须在程序中创建吗? – Lahib 2013-04-25 07:29:49