而不是触发器我计划编写一个程序,我们可以使用与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后作为工作安排。
如何处理存储过程?
答案 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