我会尽量澄清。
我有一个查询来提取数据:
select typ_no_store as IDstore, str_name as 'name', (CASE WHEN str_addr2 IS NULL THEN str_addr1 ELSE str_addr2 END) as adresse, str_postal as postalcode
from store_type inner join STRFIL on typ_no_store = str_store_no
where typ_code = 'a'
这将导致这样的结果:
001 Newy store 600 BLVD someht G11111
002 LA store 770 BLVD ests G22222
010 Texas store 112 dsntexists G33333
我需要把这个结果正在发生的变化放在一个新的表格中。我已经创建了一个具有相同列值的表名"Webstore"。(IDstore,name,adresse,postalcode(
我需要一个将查询结果插入INTO或UPDATE(如果ID已经存在(到新表中的查询。查询将在SQL server Agent上每2小时运行一次。
我尝试过像IF EXIST、ON DUPLICATE KEY和MERGE这样的命令,但我无法使其工作。似乎是因为我必须从查询中提取数据,而不是从类型化的值或整个表中提取,所以它不起作用。
知道吗?
(很抱歉,如果我的英语不清楚,请不要犹豫,提问谢谢!!(
您可以在sql server中使用MERGE。
;WITH cte
AS
(
SELECT typ_no_store as IDstore,
str_name as 'name',
(CASE WHEN str_addr2 IS NULL THEN str_addr1 ELSE str_addr2 END) as adresse,
str_postal as postalcode
FROM store_type
INNER JOIN STRFIL on typ_no_store = str_store_no
WHERE typ_code = 'a'
)
MERGE Webstore AS t
USING cte AS s
ON t.IDstore=s.IDstore
WHEN MATCHED THEN UPDATE
SET t.[name]=s.name,
t.other fields = s.other fields ...
WHEN NOT MATCHED BY TARGET THEN
INSERT (IDstore, other fields...)
VALUES(s.IDstore, s.other fields)
;