更新或插入

时间:2012-10-16 12:04:21

标签: sql-server-2008

我正在尝试更新或插入数据,具体取决于帐号是否已存在于现有数据中。 首先,我使用此

将新变量添加到表中已具有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)

我收到错误列名或提供的值与表定义不匹配。

我意识到这是因为字段数不一样,但有没有办法解决这个问题呢?

3 个答案:

答案 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中选择。