Sql server SQL Server update返回错误的值

Sql server SQL Server update返回错误的值,sql-server,Sql Server,我有一个更新查询,返回的结果不正确 UPDATE StagingWarehouse.dbo.BusinessLeads SET CompanyFK = c.CustomerPK FROM StagingWarehouse.dbo.BusinessLeads s INNER JOIN DataWarehouse.dim.Customer c ON c.CustomerBK = s.CompanyBK WHERE s.businessleadbk = 57

我有一个更新查询,返回的结果不正确

UPDATE StagingWarehouse.dbo.BusinessLeads
SET    CompanyFK = c.CustomerPK
FROM   StagingWarehouse.dbo.BusinessLeads s
       INNER JOIN DataWarehouse.dim.Customer c
         ON c.CustomerBK = s.CompanyBK
WHERE  s.businessleadbk = 5796722
运行此语句后,从
StagingWarehouse.dbo.BusinessLeads
中选择
businessleadbk=5796722
时,
CompanyFK
设置为11024703。问题是,
DataWarehouse.dim.Customer
上的
CustomerPK
11024703不存在,运行下面的查询不会返回任何结果,因此我不知道它从何处获取该数字

SELECT c.*
FROM   StagingWarehouse.dbo.BusinessLeads s
       INNER JOIN DataWarehouse.dim.Customer c
         ON c.CustomerBK = s.CompanyBK
WHERE  s.businessleadbk = 5796722

更新计划如下所示

计划中的所有运算符都已发出一行

选择
计划将被激活

Customer
上的
CustomerBK
索引中找到该行后,该行不知何故消失了,而SQL Server尝试在同一个表的聚集索引中查找相应的PK。这意味着某种腐败。可能NCI与CI相比增加了一行,或者NCI中存储的PK值无效


我会运行下面显示的
更新计划

计划中的所有运算符都已发出一行

选择
计划将被激活

Customer
上的
CustomerBK
索引中找到该行后,该行不知何故消失了,而SQL Server尝试在同一个表的聚集索引中查找相应的PK。这意味着某种腐败。可能NCI与CI相比增加了一行,或者NCI中存储的PK值无效


我会运行

您确定这不是更新前的值吗?如果没有行匹配,则不会发生更新。您是否能够上载
更新
选择
的实际执行计划XML?您需要上载到pastebin或类似版本。这很有趣。
SELECT
计划从
[Customer].[CustomerBK]
返回一行,当它尝试在
[Customer].[PK\uu Customer\uu a4af8865b6f546]
上执行键查找时,该行将被删除,并且找不到匹配的行。
UPDATE
语句不需要键查找,因此永远不会删除该行。我会检查桌子上是否有腐败。如果将
SELECT
列表更改为
SELECT c.CustomerPK
而不是
SELECT c.*
,我想您现在会返回一行?是,该表显示损坏。非常感谢您的帮助。您确定这不是更新前的值吗?如果没有行匹配,则不会发生更新。您是否能够上载
更新
选择
的实际执行计划XML?您需要上载到pastebin或类似版本。这很有趣。
SELECT
计划从
[Customer].[CustomerBK]
返回一行,当它尝试在
[Customer].[PK\uu Customer\uu a4af8865b6f546]
上执行键查找时,该行将被删除,并且找不到匹配的行。
UPDATE
语句不需要键查找,因此永远不会删除该行。我会检查桌子上是否有腐败。如果将
SELECT
列表更改为
SELECT c.CustomerPK
而不是
SELECT c.*
,我想您现在会返回一行?是,该表显示损坏。非常感谢你的帮助。