我是SQL SERVER的新手,不知道触发器和procuderes非常好。我有这个观点:
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$
我尝试过应该“转换”它的在线网站,但它没有做好。你能帮帮我吗?关于我该怎么做的任何想法?
答案 0 :(得分:0)
作为答案发布,因为评论过于深入。
我认为你误解了VIEW
是什么。当引用的对象添加了值时,您不会“更新”视图。引用Views:
视图是一个虚拟表,其内容由查询定义。喜欢 一个表,一个视图由一组命名的列和数据行组成。 除非编入索引,否则视图不作为存储的数据值集存在 在数据库中。数据的行和列来自表 在定义视图的查询中引用并动态生成 引用视图时。
当您{b}中的UPDATE
,INSERT
等数据时,该视图也会反映出来。举个简单的例子:
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
希望有所帮助。
如果我错过了评论意思的目的,请告诉我。