Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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 从没有Where子句的Select内部联接更新表_Sql_Sql Server - Fatal编程技术网

Sql 从没有Where子句的Select内部联接更新表

Sql 从没有Where子句的Select内部联接更新表,sql,sql-server,Sql,Sql Server,我正在尝试使用联接中的值更新表。但是,运行此命令会更新0行。当用select替换update语句时,我得到1行联接 以下是我在工作中努力实现的目标。获取与下一个策略相关的子策略ID$金额。这些子策略不相关,取决于日期。它们通过RGNID链接并更新临时表。我修改了下面的只是为了模拟 创建表tTB1 plcyID int、rgnID int、ncptdt datetime、plctypID int 插入tTB1 plcyID、rgnID、ncptdt、plctypID 值1,1、'2017-10-0

我正在尝试使用联接中的值更新表。但是,运行此命令会更新0行。当用select替换update语句时,我得到1行联接

以下是我在工作中努力实现的目标。获取与下一个策略相关的子策略ID$金额。这些子策略不相关,取决于日期。它们通过RGNID链接并更新临时表。我修改了下面的只是为了模拟

创建表tTB1 plcyID int、rgnID int、ncptdt datetime、plctypID int 插入tTB1 plcyID、rgnID、ncptdt、plctypID 值1,1、'2017-10-01',1,2,1、'2018-10-01',2, 3,1,'2018-10-01',3,4,1,'2019-10-01',2 -创建表tTEMP total int、plcyID int、rgnID int、ncptdt datetime、plctypID int -从tTB1中选择* ;有严格的政策 像 选择p.rgnID,MXPLCY=MAXp.plcyID 来自tTB1 t
p.rgnID=t.rgnID和p.ncptdtSQL Server上的内部连接tTB1 p,以及大多数RDM,如果列的值已经是您试图设置的值,则会以这种方式运行

此行为的演示:

创建表[t] 主键[n] ,[n]INT不为空 ; 插入[t][n] 选择1; -0行受影响 更新[t] 集合[n]=1 其中1=1; -0行受影响 从[t]中选择*; -返回1行
作为第一步,我将对最终更新重新排序,因此表tTB1位于from子句中。这不是这里的问题,但它就像罪一样令人困惑。@Camus。如何确定更新的行?最好的方法是使用输出。然后可以使用@ROWCOUNT@gordonlinoff这是由连接上的“过滤器”决定的。在这种情况下,它们的工作原理与Caluse相似抱歉,我不太明白。即使是执行类似于l.plctypID=10的操作,然后在更新后进行选择,我也不会得到任何信息。当您选择时,plctypID的值是多少?我编辑了我的cte。当我进行选择时,我会得到一行包含所有联接表的数据。当我尝试更新到任何值时,都会受到o行的影响。我遗漏了什么吗?