sql-server - 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、姓名、地址、邮政编码)
我需要一个查询,它将查询结果插入或更新(如果 ID 已经存在)到新表中。该查询将在 SQL Server 代理上每 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)
;
推荐阅读
- dom - DOM 元素不呈现 html
- python - 如何在 vscode 中手动为 Django 添加 pylint?
- python - 如何在 django 表单的模板中设置表单字段值?
- windows - 如何找出我的 PowerShell 脚本与其他服务器通信的端口?
- c# - Blazor 服务器,Router 组件的其他程序集不遵守 @page 声明
- reactjs - 设置状态未在 React 中设置
- lisp - 仅更改数组 Clisp 上的一个位置
- flutter - 在网络上颤振 P2P 通信
- javascript - 如何使用赛普拉斯验证状态更改
- reactjs - React Styleguidist - Web 组件未加载到 index.html