sql-server - SQL 查询更新已经存在的条目,如果没有,则创建一个新条目
问题描述
目前我正在更新我公司数据库上已经存在的表。连接工作正常,但我的查询让我有些头疼。
我想要做什么:使用 2 个表(作业表和步骤表)进行记录
因此,我创建了一个自定义 powershell 对象,其中包含我可以传递的所有必要信息。当我开始记录时,我在作业表中创建一个新条目,其中一列为空/空(记录结束时间:列名:停止)。一旦我通过我的脚本登录,我想添加结束时间(到作业表中已经存在的条目)。
我知道有不同的方法可以检查你是在日志作业的开始还是结束,但我想用 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 的条目,我可以确定(我的代码,我的方式)我想停止日志记录作业,因此只需要更新“停止”(结束时间)的值。
如果我使用更简单的查询,例如:
INSERT INTO job.Table (Module,JobId,ScriptId,Filepath,Start,Status,Stop,Infotext)
Values(@Module,@JobId,@ScriptId,@Filepath,@Start,@Status,@Stop,@Infotext)
我在数据库上得到了我想要的值,所以连接和数据类型错误已经被消除了。
我的语法错误在哪里?根据我的 IDE “靠近 WHERE”...
解决方案
我会用我找到的东西更新这个答案。
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;
推荐阅读
- java - 将多个 int 值与 0 进行比较的有效方法
- asp.net-core-mvc-2.0 - Asp.Net Core 2.2 MVC - 在子文件夹中设置到控制器的默认路由
- formula - 不使用表格计算的 Tableau 运行总计
- c# - 如何将自动生成的 ID 插入外键列
- android - 如何使用 Android 手机摄像头扫描图像(来自 PC 显示器)并将图像数据转换为 OpenCV Mat 格式?
- python-3.x - 在单独的线程中等待而不阻塞主事件循环,异步 python
- excel - 每年、每月和每天计算 GEOMEAN
- ios - iOS 上的 Ionic v4 状态栏文本没有改变
- memory - 获取存储在地址空间中的内存
- javascript - React Native 中的第一个数据中来自 API responseJson 的未定义数据