我在SQL中创建了一个触发器,它将在Insert上插入另一个表。但是,我需要从表中获取一个值以增加在插入中使用。
我有一张AirVisionSiteLog表。在表上插入我希望它插入另一个SiteLog表。但是,为了做到这一点,我需要从SiteLog表中获取站点的最后一个条目号。然后在其插入时获取该结果并将新条目号增加1。我是Triggers和Functions的新手,所以我不确定如何正确使用它们。我相信我有一个功能来检索和增加条目号,但我不知道如何在触发器中使用它。
我的功能 -
CREATE FUNCTION AQB_RMS.F_GetLogEntryNumber
(@LocationID int)
RETURNS INTEGER
AS
BEGIN
DECLARE
@MaxEntry Integer,
@EntryNumber Integer
Set @MaxEntry = (Select Max(SL.EntryNumber) FROM AQB_MON.AQB_RMS.SiteLog SL
WHERE SL.LocationID = @LocationID)
SET @EntryNumber = @MaxEntry + 1
RETURN @EntryNumber
END
我的触发并尝试使用功能 -
CREATE TRIGGER [AQB_RMS].[SiteLogCreate] on [AQB_MON].[AQB_RMS].[AirVisionSiteLog]
AFTER INSERT
AS
BEGIN
declare @entrynumber int
declare @corrected int
set @corrected = 0
INSERT INTO [AQB_MON].[AQB_RMS].[SiteLog]
([SiteLogTypeID],[LocationID],[EntryNumber],[SiteLogEntry]
,[EntryDate],[Corrected],[DATE_CREATED],[CREATED_BY])
SELECT st.SiteLogTypeID, l.LocationID,
(select AQB_RMS.F_GetLogEntryNumber from [AQB_MON].[AQB_RMS].[SiteLog] sl
where sl.LocationID = l.LocationID)
, i.SiteLogEntry, i.EntryDate, @corrected, i.DATE_CREATED, i.CREATED_BY
from inserted i
left join AQB_MON.[AQB_RMS].[SiteLogType] st on st.SiteLogType = i.SiteLogType
left join AQB_MON.AQB_RMS.Location l on l.SourceSiteID = i.SourceSiteID
END
GO
答案 0 :(得分:0)
我相信你很亲密。
在触发器中查询的这一部分:(我垂直设置列以使差异更明显)
SELECT st.SiteLogTypeID,
l.LocationID,
(select AQB_RMS.F_GetLogEntryNumber from [AQB_MON].[AQB_RMS].[SiteLog] sl where sl.LocationID = l.LocationID),
i.SiteLogEntry,
i.EntryDate,
@corrected,
i.DATE_CREATED,
i.CREATED_BY
......应该是:
SELECT st.SiteLogTypeID,
l.LocationID,
AQB_RMS.F_GetLogEntryNumber(select l.LocationID from [AQB_MON].[AQB_RMS].[SiteLog] sl where sl.LocationID = l.LocationID),
i.SiteLogEntry,
i.EntryDate,
@corrected,
i.DATE_CREATED,
i.CREATED_BY
基本上,您可以使用查询作为参数调用函数名称,其结果应该只是带有值的一行。
请注意,在我的修改示例中,我在函数调用中的select之后添加了l.LocationID
,因此我不确定这是否是您需要的,但更改它以满足您的需要。因为我不确定您需要的确切列,如果存在其他问题,请添加注释。