SQL 查询更新一个已经存在的条目,如果不存在则创建一个新条目
SQL Query Updating an already exisiting Entry, if not then make a new entry
目前我正在努力更新我公司数据库中已经存在的 table。连接正常,但我的查询让我有些头疼。
我想做的事情:使用 2 tables (Job-Table and Step-Table)
记录
因此我创建了一个自定义的 powershell 对象,其中包含我可以传递的所有必要信息。
当我开始记录时,我在 Job-Table 中创建了一个新条目,其中一列是 empty/null(记录结束时间:Columnname:Stop)。
一旦我登录了我的脚本,我想添加结束时间(到 Job-Table 中已经存在的条目)。
我知道有不同的方法可以检查你是在记录作业的开始还是结束,但我想用 Sql 查询来完成,所以我想出了这个 SQL-插入语句:
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 中是否有一个条目与我当前的 Job-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 "near WHERE"...
你的 if 条件对我来说很奇怪(我就是这样),如果我算对了,我会遗漏一些“)”
你可能想试试这个
IF !EXISTS(Select * FROM job.table WHERE( JobId = @JobId))
我会用我找到的东西更新这个答案。
1.
从与 OP 的聊天中我发现 job.table
实际上是一个 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 但你必须向我描述你想要什么 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;
目前我正在努力更新我公司数据库中已经存在的 table。连接正常,但我的查询让我有些头疼。
我想做的事情:使用 2 tables (Job-Table and Step-Table)
记录因此我创建了一个自定义的 powershell 对象,其中包含我可以传递的所有必要信息。 当我开始记录时,我在 Job-Table 中创建了一个新条目,其中一列是 empty/null(记录结束时间:Columnname:Stop)。 一旦我登录了我的脚本,我想添加结束时间(到 Job-Table 中已经存在的条目)。
我知道有不同的方法可以检查你是在记录作业的开始还是结束,但我想用 Sql 查询来完成,所以我想出了这个 SQL-插入语句:
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 中是否有一个条目与我当前的 Job-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 "near WHERE"...
你的 if 条件对我来说很奇怪(我就是这样),如果我算对了,我会遗漏一些“)”
你可能想试试这个
IF !EXISTS(Select * FROM job.table WHERE( JobId = @JobId))
我会用我找到的东西更新这个答案。
1.
从与 OP 的聊天中我发现 job.table
实际上是一个 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 但你必须向我描述你想要什么 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;