我有两个更新声明。两者相似,但在不同的表集上运行。一个有效,另一个无效。我不确定为什么。
我有一个名为 UPLOAD 的表。它包含来自另一个数据系统的解析结果。
- 供应商文本 (nVarChar(50))
- 供应商 ID (BigInt)
- 模型文本 (nVarChar(50)
- 模型 ID (BigInt)
- UnitText (nVarChar(50))
- 单位 ID (BigInt)
- 子单元文本 (nVarChar(50))
- 子单元 ID (BigInt)
最初,四个文本字段是从解析中填充的。
我们从四个表中提取信息。
- 供应商表
- 模型表
- 单元表
- 子单元表
Model 表有一个整数字段,将其链接到 Vendor 表。
Subunit 表有一个将其链接到 Unit Table 的整数字段。
我们使用了四个标量函数。
FindVendor - 获取文本值并在供应商表中搜索名称并返回 PK。
FindModel - 采用文本值和整数值(
供应商的 PK)。返回型号的 PK。- FindUnit - 获取文本值并在 UnitTable 中搜索匹配项并返回单位的 PK。
- FindSubUnit - 获取文本值和整数值(UNIT 的 PK)并返回 SubUnit 的 PK。
更新有效的声明
UPDATE UPLOADTABLE
SET
VendorID = FindVendor(VendorText),
ModelID = FindModel(ModelText, VendorID)
我已经对此进行了测试,它给出了正确的结果。
然而这失败了。
UPDATE UPLOADTABLE
SET
UNITID = FindUnit(UnitText),
SubUnitID = FindSubUnit(SubUnitText, UnitID)
我得到的只是 SubUnitID 中的零。
然而,这确实有效。
UPDATE UPLOADTABLE
SET
UnitID = FindUnit(UnitText);
UPDATE UPLOADTABLE
SET
SubUnitID = FindSubUnit(SubUnitText, UnitID)
不知道为什么第一个有效而第二个失败。除非型号的更新只是偶然。我不知道 update 语句何时写入 Set 语句的 eadch 的结果。
有任何想法吗?