Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用临时表在表上创建触发器和效果_Sql_Sql Server_Database - Fatal编程技术网

Sql 使用临时表在表上创建触发器和效果

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

我想通过以下步骤在SQL Server 2012中创建触发器:

在名为project pkid、prjid、jandata、febdata、janarea或febarea的表中更改列jandata、febdata、janarea或febarea时

然后我需要执行某些可以执行的计算,然后将新数据存储在临时表中

我需要签入items表如果itemid存在,那么我需要更新表中的列值,否则我需要插入值

所以现在我要做的第一步是如何创建触发器并在临时表中插入值

我用了这个密码

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连接语法所取代,不鼓励使用它