日期:2014-05-17  浏览次数:20460 次

两表关联触发器的问题!!!!
有两张表PURTC和PURTD 其中TC001=TD001,TC002=TD002,TCD01是PURTC上的字段
当我更新TCD01='Y'的时候,触发更新TD016='y'
不知道触发器写哪张表好?这样写,不知道错哪里,请大神指教!!!
CREATE TRIGGER PURTD20121123 ON [dbo].[PURTC] 
FOR INSERT
AS
DECLARE @TC001 CHAR(4),
        @TC002 CHAR(11),
        @TD001 CHAR(4),
        @TD002 CHAR(11),
        @TCD01 CHAR(1)   
                   
BEGIN TRANSACTION
SET NOCOUNT ON
SELECT @TC001=TC001,@TC002=TC002,@TCD01=TCD01 FROM INSERTED
SELECT @TD001=TD001,@TD001=TD001,@TD002=TD002 FROM PURTD WHERE TD001=@TC001 AND TD002=@TC002

IF UPDATE(TCD01) AND @TCD01='Y'
BEGIN
UPDATE PURTD SET TD016='y' WHERE TD001=@TC001 AND TD002=@TC002 AND TD018='Y' AND TD016='N'
END
SET NOCOUNT OFF
COMMIT TRANSACTION

------最佳解决方案--------------------
CREATE TRIGGER PURTD20121123 ON [dbo].[PURTC] 
FOR UPDATE
AS                
BEGIN TRANSACTION
    SET NOCOUNT ON
    UPDATE PURTD SET TD016='y'
FROM INSERTED i 
WHERE TD001=i.TC001 AND TD002=i.TC002 AND i.TD018='Y' AND i.TD016='N'
    END
    SET NOCOUNT OFF
COMMIT TRANSACTION

你这个应该是Update触发器

------其他解决方案--------------------
写在第一张表上PURTC

更新的时候使用upate from语句  不要定义变量更新  那样的话如果更新多行数据就会出现问题
------其他解决方案--------------------
引用:
写在第一张表上PURTC

更新的时候使用upate from语句  不要定义变量更新  那样的话如果更新多行数据就会出现问题

能写一下upate from语句  不是很明白你的意思……
------其他解决方案--------------------
update tb
set tb.字段=i.字段 from inserted where i.关联字段=tb.关联字段

------其他解决方案--------------------
引用:
SQL code?12update tbset tb.字段=i.字段 from inserted where i.关联字段=tb.关联字段
ALTER TRIGGER PURTD20121123 ON [dbo].[PURTC] 
FOR INSERT
AS
DECLARE @TC001 CHAR(4),
        @TC002 CHAR(11),
        @TD001 CHAR(4),
        @TD002 CHAR(11),
        @TCD01 CHAR(1)   
                   
BEGIN TRANSACTION
SET NOCOUNT ON
SELECT @TC001=TC001,@TC002=TC002,@TCD01=TCD01 FROM INSERTED
SELECT @TD001=TD001,@TD001=TD001,@TD002=TD002 FROM PURTD WHERE TD001=@TC001 AND TD002=@TC002