寻找程序而不是我们可以安排作为工作的触发器

时间:2014-10-28 18:19:57

标签: sql-server database triggers

而不是触发器我计划编写一个程序,我们可以使用与TRIGGER相同的作业运行 与这两个表以相同的方式。 我怎么能这样做?

这是我的表名列

1.tblcal

ID(int,not null)
UID(varchar(10),null)
Desc(varchar(200),null)
Date(datetime,null)
avbl(varchar(5),null)

2.tblEvent
ID(int,notnull)
UID(varchar(10),null)
Desc(varchar(200),null)
Date(datetime,null)

Down是我对tblEvent的触发器..

ALTER TRIGGER [dbo].[trU] ON [dbo].[tblEvent] 
FOR INSERT
AS
Declare @CuID char(6),

@CuDesc char(40),
@CuDate datetime 

SET NOCOUNT ON

Select @CuID = i.UID , @CuDesc=i.Desc, @CuDate=i.Date From Inserted i

If(@CuDesc !='available')
Begin
Update tblCal set avbl='Out', Desc=@CurDesc where cadate=@CuDate and UID=@CuID
ENd

SET NOCOUNT OFF

我还有另一个问题就是Desc column.Desc将要进出的基本上我们需要以不同的描述更新tblcal;在这种情况下,我不认为触发器是可靠的;例如10描述我们需要更新和其他10我们需要更新

实际上每个星期四的tblevent数据都会在加载后加载它触发一个触发器并在tblcal中更新。

但我的客户正在寻找一个程序,我们可以在星期四完成tblevent后作为工作安排。

如何处理存储过程?

1 个答案:

答案 0 :(得分:0)

程序

CREATE PROCEDURE dbo.usp_UpdateEventData
AS
BEGIN
  SET NOCOUNT ON;

    UPDATE C 
     SET c.avbl   = 'Out'
        ,c.[Desc] = e.[Desc]
    FROM [dbo].tblCal C 
    INNER JOIN [dbo].[tblEvent] e ON c.[UID]  = e.[UID]
                                 AND c.cadate = e.[Date]  --<-- check if you only want
    WHERE e.[Desc] <> 'available'                         -- to join on date not datetime
END                                                       -- CAST both columns to DATE

此外,如果要保持触发器不变,则需要修改触发器定义以处理多个插入,您可以使用与此过程相同的逻辑来更新触发器定义。

触发器修复

ALTER TRIGGER [dbo].[trU] ON [dbo].[tblEvent] 
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;

    UPDATE C 
     SET c.avbl   = 'Out'
        ,c.[Desc] = i.[Desc]
    FROM [dbo].tblCal C 
    INNER JOIN inserted i ON c.[UID]  = i.[UID]
                                 AND c.cadate = i.[Date]
    WHERE i.[Desc] <> 'available'


END