【问题标题】:SQL Query Updating an already exisiting Entry, if not then make a new entrySQL 查询更新已经存在的条目,如果没有,则创建一个新条目
【发布时间】:2020-02-26 17:03:37
【问题描述】:

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

我想做的事:使用 2 个表(Job-Table 和 Step-Table)记录日志

因此,我创建了一个自定义 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-ID 检查 job.table 中是否有一个条目。 如果没有,我将开始一个新的日志作业并想要插入所有的值。如果有一个带有 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”...

【问题讨论】:

  • 你使用什么数据库?
  • 我的公司使用 Microsoft SQL

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


【解决方案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;

【讨论】:

  • 我不想要数据库中的任何东西,我想在上面写东西,然后在写完之后,用结束时间更新我的初始化条目。如果表中有一个具有正确 ID 的条目,我只想将一个值添加到一个特定列。所以在最后一步中,我想在我的 job.table 中选择“Stop”列并给出一个值。
  • 嗨@TheT,请保持简单。什么是 job.table ?一张桌子?
  • 是的,抱歉,这只是我们公司的命名约定... job.table 是我们数据库中名为 Job 的表
  • 好的,那么这不是你的做法。我会将其添加为第一个错误
  • @TheT 请检查我的答案
【解决方案2】:

你的 if 条件对我来说看起来很奇怪(mb 那就是我),如果我算得正确,我会漏掉一些“)”

你可能想试试这个

 IF !EXISTS(Select * FROM job.table WHERE( JobId = @JobId))

【讨论】:

  • 按照您的回答,我在“!”附近有语法错误,顺便说一句,我正在使用 MS SQL...添加“)”时没有任何区别。
猜你喜欢
  • 2010-10-16
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 2018-09-25
  • 2014-12-08
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多