创建TRIGGER以插入,更新和删除使用视图 - SQL SERVER

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建TRIGGER以插入,更新和删除使用视图 - SQL SERVER相关的知识,希望对你有一定的参考价值。

我是SQL SERVER的新手,并且不太了解触发器和程序。我有这个观点:

 CREATE VIEW vwHorasTrabFunc AS
  SELECT DISTINCT
    FUNC.nome AS NomeFunc,
    sobrenome AS SobrenomeFunc,
    Salario AS salarioFunc,
    FUNC_PROJETO.cpf AS cpfFuncionario,
    FUNC_PROJETO.pno AS projetoFuncionario,
    FUNC_PROJETO.hours AS hrsTrabalhadasFuncionario
FROM funcionario AS FUNC INNER JOIN
func_proj AS FUNC_PROJETO ON FUNC.cpf = FUNC_PROJETO.cpf

并且我想在“经理”在表格中插入新员工后更新员工薪水。我怎样才能做到这一点?我需要一个程序吗?我需要使用触发器插入,更新和删除,我真的不知道如何启动它。我搜索了很多寻求帮助的网站,但我无法做到。我真的需要你的帮助。谢谢。

update1:​​我使用postgres做了触发器,但我不知道如何将它“迁移”到sql server。 postgres更容易做到,因为我的教授告诉我们如何在postgres中使用它。有人可以帮我解决如何迁移,例如:

CREATE OR REPLACE FUNCTION insertDep()
    RETURNS TRIGGER AS $insertDep$
BEGIN
    IF EXISTS (select * from funcionario where cpf = NEW.func_cpf AND nome = NEW.func_nome) then
        insert into dependente values(NEW.func_cpf, NEW.dep_nome, NEW.dep_gen, NEW.dep_data_nasc, NEW.relacionamento);
    ELSE
        Raise Exception 'O funcionario não está cadastrado no banco.';
    END IF;
    RETURN NULL;
END;

还有这个:

   CREATE OR REPLACE FUNCTION insert_hpproj()
  RETURNS trigger AS
$BODY$
BEGIN
         -- Raise Exception '%',CPFNS;
    IF NOT EXISTS (select * from funcionario where cpf = NEW.func_cpf AND nome = NEW.func_nome) 
        OR NOT EXISTS (select * from projeto where pnumero = NEW.proj_numero AND pnome = NEW.proj_nome)
          then Raise Exception 'O funcionário apontando ou o projeto não existe no banco.';
        ELSE
            insert into func_proj values(NEW.func_cpf, NEW.proj_numero, NEW.horas);
        END IF;
      RETURN NULL;
END
$BODY$

我试过在线网站应该“转换”它,但它没有做好。你能帮帮我吗?关于我该怎么做的任何想法?

答案

作为答案发布,因为评论过于深入。

我认为你误解了VIEW是什么。当引用的对象添加了值时,您不会“更新”视图。引用Views

视图是一个虚拟表,其内容由查询定义。与表一样,视图由一组命名的列和数据行组成。除非编入索引,否则视图不会作为数据库中存储的数据值集存在。数据的行和列来自定义视图的查询中引用的表,并在引用视图时动态生成。

当你在一个bjet中使用UPDATEINSERT等数据时,那个VIEW也会反映出来。举个简单的例子:

USE Sandbox;
GO

CREATE TABLE SampleTable (ID int);
GO
CREATE VIEW SampleView AS
    SELECT ID, ID + 2 as ModdedID
    FROM SampleTable;
GO

INSERT INTO SampleTable VALUES (1),(2);

--This'll return the rows I just inserted.
SELECT *
FROM SampleView;
GO

DELETE FROM SampleTable
WHERE ID = 1;

--This'll return just ID 2 now..
SELECT *
FROM SampleView;
Go

--Clean up
DROP VIEW SampleView;
DROP TABLE SampleTable;
GO

希望有所帮助。

如果我错过了你评论的意思,请告诉我。

以上是关于创建TRIGGER以插入,更新和删除使用视图 - SQL SERVER的主要内容,如果未能解决你的问题,请参考以下文章

特殊存储过程——触发器Trigger

使用Swift 3和CoreData删除表视图行

零配件入库 Trigger 插入触发台账和零配件更新

物化视图快速刷新 - 更新基表时插入和删除

用于插入和更新的 MySQL Fire Trigger

观察 NSTreeController 绑定的核心数据实体以进行插入/删除