SQL查询更新现有条目,如果不存在,则进行新条目

时间:2020-02-26 17:03:37

标签: sql-server sql-insert insert-update

目前,我正在更新公司数据库中已经存在的表。连接工作正常,尽管我的查询让我有些头疼。

我要做什么:使用2个表(作业表和步骤表)进行记录

因此,我创建了一个自定义的powershell对象,其中包含所有我可以传递的必要信息。 当我开始记录时,我在作业表中创建一个新条目,其中一列为空/空(记录的结束时间:列名:停止)。 登录脚本后,我想添加结束时间(到Job-Table中一个已经存在的条目中)。

我知道有其他方法可以检查您是在记录作业的开始还是结束,但是我想通过Sql Query来执行此操作,所以我想到了以下SQL-Insert语句:

Begin 
    IF NOT EXISTS(Select * FROM job.table
                    WHERE JobId = @JobId)
        BEGIN
            INSERT INTO logg.Job (Module,JobId,ScriptId,Filepath,Start,Status,Stop,Infotext)
                Values(@Module,@JobId,@ScriptId,@Filepath,@Start,@Status,@Stop,@Infotext)
        END
    ELSE
        BEGIN
            INSERT INTO logg.Job(Stop)
                VALUES (@Stop)
                    WHERE( JobId = @JobId)
        END
END

我很确定我缺少一些';'但是我所有的尝试和错误都没有带我解决问题...

基本上,我想检查一下job.table中是否有一个带有当前作业ID的条目。 如果没有,我要开始一个新的logg-job,并想插入所有的值。如果可以确定带有Job-ID的条目,我可以确定(我的代码,以我的方式),我想停止日志记录作业,因此只需要更新'Stop'的值(结束时间)即可。

如果我使用更简单的查询,例如:

INSERT INTO job.Table (Module,JobId,ScriptId,Filepath,Start,Status,Stop,Infotext)
    Values(@Module,@JobId,@ScriptId,@Filepath,@Start,@Status,@Stop,@Infotext)

我在数据库上获得了所需的值,因此连接和数据类型错误已被消除。

我的语法错误在哪里?根据我的IDE“ WHERE附近” ...

2 个答案:

答案 0 :(得分:1)

我将使用找到的东西来更新此答案。

1。

从与OP的聊天中,我发现job.table实际上是一个表名。所以这是第一个语法问题。

应该是

Select * FROM "job.table"
WHERE JobId = @JobId

而不是:

Select * FROM "job.table"
WHERE JobId = @JobId

2。

这不好:

INSERT INTO "job.table"(Stop)
VALUES (@Stop)
WHERE( JobId = @JobId)

您可以:

INSERT INTO "job.table"(Stop)
VALUES (@Stop)

或者您可以使用insert into select,但是您必须向我描述您要选择的内容。

3。

最后这应该是您的代码:

Begin 
    IF NOT EXISTS(Select * FROM "job.table"
                    WHERE JobId = @JobId)
        BEGIN
            INSERT INTO logg.Job (Module,JobId,ScriptId,Filepath,Start,Status,Stop,Infotext)
                Values(@Module,@JobId,@ScriptId,@Filepath,@Start,@Status,@Stop,@Infotext)
        END
    ELSE
        BEGIN      
            INSERT INTO "job.table"(Stop)
            values  @Stop
        END
END;

答案 1 :(得分:0)

您的情况对我来说很奇怪(mb就是我),并且如果我算得上是正确的话,我会错过一些“)”

您可能想尝试一下

<Reference Include="netstandard" />