繁体   English   中英

将PostgreSQL触发器移植到SQL Server 2008

[英]Porting PostgreSQL trigger to SQL Server 2008

我必须移植PostgreSQL触发器,但是由于我对此没有太多经验,所以我不知道如何更改某些部分。 原始触发器是:

CREATE TRIGGER aerolinea_tr
AFTER UPDATE
ON public.aerolinea FOR EACH ROW
EXECUTE PROCEDURE public."actualizaWarehoseTemplate"();

DECLARE
  mviews RECORD;
BEGIN
  IF (TG_OP = 'UPDATE') THEN
    FOR mviews  IN SELECT DISTINCT template.idtemplate
                    FROM template
                    INNER JOIN vueloaerolinea ON (template.idvueloaerolinea = vueloaerolinea.idvueloaerolinea)
                    WHERE vueloaerolinea.codigolinea = old.codigolinea
    LOOP
         UPDATE detalletemplate SET idwarehose = new.idwarehouse WHERE detalletemplate.idtemplate = mviews.idtemplate;
    END LOOP;
  END IF;
  RETURN old;
END;

我所做的是:

CREATE TRIGGER aerolinea_tr
ON aerolinea
AFTER UPDATE
AS
BEGIN
  -- if no row affected, the trigger ends.
  IF @@ROWCOUNT = 0
  BEGIN
    RETURN;
  END;

  IF EXISTS(SELECT * FROM inserted)
  BEGIN
    IF EXISTS(SELECT * FROM deleted)
    BEGIN
      --Update code goes here.
    END
  END
END;

但是我找不到SQL Server的RECORD的等效项,也不知道该怎么做。

看来您需要使用游标 您可以尝试这样的操作-它不完整,因为我不知道aerolinea表的表模式,但是尽管如此,它应该使您朝正确的方向前进:

DECLARE @idtemplate INT //Assuming this is an int
DECLARE @mviews CURSOR
DECLARE @newidwarehouse INT

SELECT @newidwarehouse = idwarehouse FROM INSERTED

SET @mviews = CURSOR FOR
SELECT DISTINCT template.idtemplate
FROM template
    INNER JOIN vueloaerolinea ON (template.idvueloaerolinea = vueloaerolinea.idvueloaerolinea)
    INNER JOIN DELETED ON DELETED.codigolinea = vueloaerolinea.codigolinea

OPEN @mviews 
FETCH NEXT
FROM @mviews INTO @idtemplate 
WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE detalletemplate
    SET idwarehose = @newidwarehouse 
    WHERE detalletemplate.idtemplate = @idtemplate 
FETCH NEXT
FROM @mviews INTO @idtemplate 
END
CLOSE @mviews 
DEALLOCATE @mviews 

顺便说一句,您无需在检查更新时检查插入和删除。 您可以只检查已删除:

IF EXISTS (SELECT * FROM DELETED)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM