INSERT INTO,如果已存在UPDATE.来自现有查询.要放到SQL代理作业中



我会尽量澄清。

我有一个查询来提取数据:

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)
;

最新更新