Sql 使用临时表在表上创建触发器和效果
我想通过以下步骤在SQL Server 2012中创建触发器: 在名为project pkid、prjid、jandata、febdata、janarea或febarea的表中更改列jandata、febdata、janarea或febarea时 然后我需要执行某些可以执行的计算,然后将新数据存储在临时表中 我需要签入items表如果itemid存在,那么我需要更新表中的列值,否则我需要插入值 所以现在我要做的第一步是如何创建触发器并在临时表中插入值 我用了这个密码Sql 使用临时表在表上创建触发器和效果,sql,sql-server,database,Sql,Sql Server,Database,我想通过以下步骤在SQL Server 2012中创建触发器: 在名为project pkid、prjid、jandata、febdata、janarea或febarea的表中更改列jandata、febdata、janarea或febarea时 然后我需要执行某些可以执行的计算,然后将新数据存储在临时表中 我需要签入items表如果itemid存在,那么我需要更新表中的列值,否则我需要插入值 所以现在我要做的第一步是如何创建触发器并在临时表中插入值 我用了这个密码 CREATE TRIGGER
CREATE TRIGGER sysgenitemsvalue
UPDATE ON project
BEGIN
create table #temp
(
pkid int,
JANORG int,
FEBORG int,
ORGID int,
PROJID int,
BUDGETYEAR int
)
INSERT INTO #temp(pkid, JANORG, FEBORG, ORGID, PROJID, BUDGETYEAR)
SELECT
v.pkid,
CASE
WHEN v.JANORG <> '0' THEN v.JANORG
WHEN v.JANAREA <> '0' THEN v.JANAREA
ELSE p.JANORG
END "JANORG",
CASE
WHEN v.FEBORG <> '0' THEN v.FEBORG
WHEN v.FEBAREA <> '0' THEN v.FEBAREA
ELSE p.FEBORG
END "FEBORG",
o.org_id, o.pt_id, o.budgetyear
FROM
project v, proj p, org o
WHERE
o.pkid = v.orgpt_id
AND o.pt_id = p.projid
AND p.orgid = o.org_id
AND p.budgetyear = o.budgetyear
你的问题在这里没有多大意义。你为什么需要临时桌?此外,您的表结构听起来可能需要一些规范化。如果您需要知道如何在SQLServer中创建触发器,您可以使用搜索引擎来帮自己一个大忙。这里有一个例子。谢谢你的宝贵建议,我不知道这个搜索引擎,我需要一个临时表,以便我可以比较数据,并相应地更新,我不能做规范化,这就是为什么我对触发器的工作。我无法使用触发器创建具有特定值的临时表无论无法规范化表如何强制您使用触发器。他们完全没有关系。不管怎样,我怀疑你真的需要临时表。您已经拥有插入和删除的虚拟表。也许如果你能解释一下你想做什么,我们可以帮助你找到一个有效的解决方案。你不需要临时表。现在仍然100%不清楚你想做什么。您可能可以使用cte,甚至可以只使用此查询,但此处的临时表可能有些过分。此外,您确实需要开始使用ANSI-92样式联接,而不是此旧版本。它已经存在了将近30年了20多年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表列表样式被正确的ANSI连接语法所取代,不鼓励使用它