Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 Server:更新查询不会更改任何内容,不会显示任何错误_Sql_Sql Server - Fatal编程技术网

SQL Server:更新查询不会更改任何内容,不会显示任何错误

SQL Server:更新查询不会更改任何内容,不会显示任何错误,sql,sql-server,Sql,Sql Server,我试图用同一个表中的值更新该表 我想要的是更改工作程序和客户端相同的行中的连接设置,并且更改的行连接设置在与同一工作程序和客户端的另一个连接结束后5分钟内开始 我首先创建了一个SELECT查询,它返回了需要更改的所有行 SELECT t.* FROM Table1 t WHERE EXISTS (SELECT 1 FROM Table1 WHERE worker = t.worker AND client = t.client

我试图用同一个表中的值更新该表

我想要的是更改工作程序和客户端相同的行中的连接设置,并且更改的行连接设置在与同一工作程序和客户端的另一个连接结束后5分钟内开始

我首先创建了一个SELECT查询,它返回了需要更改的所有行

SELECT t.* 
FROM Table1 t
WHERE EXISTS (SELECT 1 FROM Table1
              WHERE worker = t.worker 
                AND client = t.client
                AND t.SessionNo != SessionNo
                AND t.[Connection setup] <= DATEADD(mi, 5, [Connection end])
                AND t.[Connection setup] >= [Connection end])
例如:

第一个表是应该更改的行。正如您所看到的,有一列right time,显示了更新后他们应该具有的值

   SessionNo  worker    Tag       Start     Ende    Dauer   Connection setup    Connection end      client      right_time
1   424568  mh  09.01.2020 00:00:00 13:45   13:49   00:04   09.01.2020 13:45:00 09.01.2020 13:49:00 OBENAT1D0209    13:44
2   269650  mg  09.03.2020 00:00:00 10:25   10:47   00:21   09.03.2020 10:25:00 09.03.2020 10:47:00 OBENAT1D0117    10:24
3   280892  mg  09.03.2020 00:00:00 12:19   12:22   00:03   09.03.2020 12:19:00 09.03.2020 12:22:00 OBENAT1D0117    12:19
4   175250  mg  09.03.2020 00:00:00 13:12   13:13   00:01   09.03.2020 13:12:00 09.03.2020 13:13:00 ORTNERAT1D0001  13:04
5   332684  dg  09.05.2020 00:00:00 16:05   16:33   00:28   09.05.2020 16:05:00 09.05.2020 16:33:00 KILLYAT3D0102   15:57
但正如您在这里看到的,开始列仍然是相同的

   SessionNo  worker    Tag       Start     Ende    Dauer   Connection setup    Connection end      client      right_time
1   317045  mh  09.01.2020 00:00:00 09:29   09:38   00:09   09.01.2020 09:29:00 09.01.2020 09:38:00 AUMAAT1D0124    09:29
2   144035  sb  09.01.2020 00:00:00 11:09   11:27   00:18   09.01.2020 11:09:00 09.01.2020 11:27:00 OBENAT1D0231    11:09
3   437704  mh  09.01.2020 00:00:00 13:44   13:44   00:00   09.01.2020 13:44:00 09.01.2020 13:44:00 OBENAT1D0209    13:44
4   424568  mh  09.01.2020 00:00:00 13:45   13:49   00:04   09.01.2020 13:45:00 09.01.2020 13:49:00 OBENAT1D0209    13:44
5   219640  mh  09.01.2020 00:00:00 15:16   15:26   00:10   09.01.2020 15:16:00 09.01.2020 15:26:00 OBENAT1D0209    15:16
6   201023  mh  09.01.2020 00:00:00 16:29   16:35   00:06   09.01.2020 16:29:00 09.01.2020 16:35:00 OBENAT1D0209    16:29
7   236114  mg  09.03.2020 00:00:00 08:55   09:08   00:12   09.03.2020 08:55:00 09.03.2020 09:08:00 NULL    NULL
8   271379  mg  09.03.2020 00:00:00 10:24   10:25   00:00   09.03.2020 10:24:00 09.03.2020 10:25:00 OBENAT1D0117    10:24
9   269650  mg  09.03.2020 00:00:00 10:25   10:47   00:21   09.03.2020 10:25:00 09.03.2020 10:47:00 OBENAT1D0117    10:24
10  290765  mg  09.03.2020 00:00:00 12:19   12:19   00:00   09.03.2020 12:19:00 09.03.2020 12:19:00 OBENAT1D0117    12:19
11  280892  mg  09.03.2020 00:00:00 12:19   12:22   00:03   09.03.2020 12:19:00 09.03.2020 12:22:00 OBENAT1D0117    12:19
12  538583  mg  09.03.2020 00:00:00 12:30   12:58   00:28   09.03.2020 12:30:00 09.03.2020 12:58:00 RATTAYAT1D0107  NULL
13  697202  mg  09.03.2020 00:00:00 13:04   13:08   00:04   09.03.2020 13:04:00 09.03.2020 13:08:00 ORTNERAT1D0001  13:04
14  175250  mg  09.03.2020 00:00:00 13:12   13:13   00:01   09.03.2020 13:12:00 09.03.2020 13:13:00 ORTNERAT1D0001  13:04
15  330580  dg  09.05.2020 00:00:00 15:57   16:05   00:08   09.05.2020 15:57:00 09.05.2020 16:05:00 KILLYAT3D0102   15:57
16  332684  dg  09.05.2020 00:00:00 16:05   16:33   00:28   09.05.2020 16:05:00 09.05.2020 16:33:00 KILLYAT3D0102   15:57

注意:在这种情况下,为了测试值,我将更改“开始”列而不是“连接启动”。

您正在更新零行,原因是:

ON (t.SessionNo = t2.SessionNo)
...
AND t2.SessionNo <> t.SessionNo

因此,我假设在执行更新时,在输出窗口中也不会显示任何行受到影响。如果是这样,那是因为您的加入条件不正确。SELECT和UPDATE是相同的,与其用EXISTS将其作为SELECT写入,还不如用JOIN写入,确保返回数据,然后将其更改为更新。此外,在更新中,您在t.SessionNo=t2.SessionNo和t.SessionNo!=t2.1没有。t.SessionNo怎么能等于和不等于t2.SessionNo?不行。那我该怎么加入他们呢?因为没有其他唯一的值可用于连接。我是否应该使用不同的方法?与不使用连接一样,问题是t.SessionNo=t2.SessionNo与t.SessionNo=t2.SessionNo直接冲突;这两个条款不可能都是真的。如果t.SessionNo等于t2.SessionNo根据定义不等于t2.SessionNo。。。故意双重否定我是根据网上的一些调查结果进行调查的,我不太明白这一切到底应该如何运作。你的回答确实有帮助,但我有一个问题。当同一工作者与同一客户机有多个连接,并且所有连接都发生在它们之间不到5分钟的时间内时。我怎样才能让所有这些连接都有一个相同的开始呢?我在我的question@AmilaBečirović。这回答了您最初提出的问题。我建议您删除此问题的编辑,接受此答案,然后提出新问题。堆栈溢出不是一个帮助我解决问题的游戏。@GordonLinoff,我计划接受这个答案,正如你所说,它确实回答了最初的问题。我只是想问写答案的人是否知道我该如何完成这个额外的问题,因为他们已经很熟悉我的问题了。人们有时确实会有其他问题,我不是故意粗鲁……我只是想了解它是如何工作的,而不仅仅是复制/粘贴it@miwa_p . . . 我不是想让这个评论听起来很刺耳,只是一个事实陈述。对一个问题进行了一些修改,以澄清所问的问题——例如,我不想输出带有时间成分的日期。然而,您添加了一个全新的条件,这使它成为一个新问题。@GordonLinoff…您是对的,这是一个新问题。但在我写这篇文章的时候,我并不认为这是一个新的话题,更像是对原始q的一个小小的补充。从那以后,我发现它比我想象的更复杂,并且仍在寻找如何解决它。谢谢你为我澄清……下次我会尽量说得更具体一些
ON (t.SessionNo = t2.SessionNo)
...
AND t2.SessionNo <> t.SessionNo
UPDATE t
SET t.Start = t2.Start
FROM Table1 t
INNER JOIN Table1 t2 ON  t.worker = t2.worker
                     AND t.client = t2.client
                     AND t.SessionNo <> t2.SessionNo
                     AND t.[Connection setup] <= DATEADD(mi, 5, t2.[Connection end])
                     AND t.[Connection setup] >= t2.[Connection end];