【发布时间】:2016-02-25 22:40:05
【问题描述】:
我有一个需要从不同数据库中提取的临时表。原因是每个数据库都在一组单独的员工中保存信息,我们正在尝试创建一个报告,将它们全部放入一个文件中。为此,当我创建临时表时,我会说:
Select ...
,...
,CAST(NULL AS int) AS 'FedExemptions'
,...
INTO #TaxInfo
FROM #....
然后我像这样更新 FedExemptions 列:
UPDATE #TaxInfo
set FedExemptions = (SELECT ISNULL(FEDERAL_EXEMPTIONS, 0)
FROM <db1>.EMPS
WHERE CONVERT(int, <db1>.EMPS.EMP) = #TaxInfo.EmpNo)
UPDATE #TaxInfo
set FedExemptions = (SELECT ISNULL(FEDERAL_EXEMPTIONS, 0)
FROM <db2>.EMPS
WHERE CONVERT(int, <db2>.EMPS.EMP) = #TaxInfo.EmpNo)
UPDATE #TaxInfo
set FedExemptions = (SELECT ISNULL(FEDERAL_EXEMPTIONS, 0)
FROM <db3>.EMPS
WHERE CONVERT(int, <db3>.EMPS.EMP) = #TaxInfo.EmpNo)
UPDATE #TaxInfo
set FedExemptions = (SELECT ISNULL(FEDERAL_EXEMPTIONS, 0)
FROM <db4>.EMPS
WHERE CONVERT(int, <db4>.EMPS.EMP) = #TaxInfo.EmpNo)
但是,最后一次更新(db4)会覆盖之前的其他 3 次更新,将前三组的 Fedexemptions 设置为 0
我不明白为什么。我可以发誓:
WHERE CONVERT(int, <db4>.EMPS.EMP) = #TaxInfo.EmpNo
这样当 emp 编号不匹配时,SSMS 不会触及行。
作为旁注,我正在对 Emp 编号进行 CONVERT,因为其中一个 #TaxInfo Emp 编号是 INT,而
【问题讨论】:
标签: sql sql-server tsql sql-update temp-tables