我正在尝试更新或插入数据,具体取决于帐号是否已存在于现有数据中。 首先,我使用此
将新变量添加到表中已具有acocunt编号的那些变量中drop table #test1
select a.*, B.Delq_Sep12, b.Bal_Sep12, b.Queue_Sep12
into #test1
from pcd1 a
left join #pcd_sep12 b on (a.ACCOUNT_NUMBER = B.account_number)
然后我将所有那些账号不在test1(上面创建)的记录从#pcd_sep12添加到test1
INSERT #test1
SELECT * FROM #pcd_sep12 WHERE account_number NOT IN(SELECT account_number FROM #test1)
我收到错误列名或提供的值与表定义不匹配。
我意识到这是因为字段数不一样,但有没有办法解决这个问题呢?
答案 0 :(得分:2)
为什么不使用MERGE(又名“upsert”)声明?
MERGE INTO pcd1 M
USING (SELECT * FROM #pcd_sep12) src ON M.account_number = src.account_number
WHEN MATCHED
-- UPDATE stuff
WHEN NOT MATCHED BY TARGET
-- INSERT stuff;
这样您就不需要临时表或任何测试:这些在加载时不会是并发安全的
答案 1 :(得分:0)
你必须指定像这样的列
INSERT INTO #test1 (column1, column2, column3)
(SELECT column1, column2, column3 FROM #pcd_sep12 WHERE account_number NOT IN(SELECT account_number FROM #test1))
答案 2 :(得分:0)
如果我没弄错的话,你的#test1表也有来自pcd1表的列。但在第二个查询中,您只能从#pcd_sep12中选择。