我有一个需要从不同数据库中提取的临时表。原因是每个DB都在一个单独的员工组中持有信息,我们正试图创建一个报告,将他们全部归入一个文件。要做到这一点,当我创建临时表我说:TSQL如何多次更新临时表列
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编号是INTs,并且< db>数据库是varchars。
Ohhhh,让我看看是否有效:) –
谢谢你。似乎我需要一个橡皮鸭,因为那个看起来挺直直的,我的大脑只是拒绝想到...... –