Vin*_*t L 2 mysql sql-server merge upsert
我目前有一个MySQL服务器,但目前正在迁移到MS SQL Server。
我试图在C#应用程序的表中每批插入很多(2000)或记录。我想复制MySQL的“ REPLACE INTO”(替换)(UPSERT),如果记录存在,我想更新它,如果记录不存在,我想插入它。我目前有一个这样的声明:
REPLACE INTO tablename (keycol, col1, col2)
VALUES ('A','B','C'),
('C','D','E'),
('F','G','H'),
('I','J','K');
Run Code Online (Sandbox Code Playgroud)
有些记录将存在,而另一些则不存在。另外,该语句将在许多不同的表上运行,并且值是在运行时构建的(通过动态循环遍历每个字段),因此在编译时表的结构未知。
我怀疑我是否可以有效地使用MERGE,因为该批次中的某些记录将存在而一些记录将不存在,并且由于我不知道事前的表格结构以及我正在更新批次的事实。 2000条记录,出于性能原因,我不想使用子查询。
最好的解决方案的任何帮助将不胜感激。
MERGE
专为以下情况而设计:
CREATE TABLE tablename(keycol CHAR(1) PRIMARY KEY, col1 CHAR(1), col2 CHAR(1));
INSERT INTO tablename(keycol, col1, col2) VALUES('A', 'X', 'X'); -- to be updated
SELECT * FROM tablename;
MERGE tablename trg
USING (VALUES ('A','B','C'),
('C','D','E'),
('F','G','H'),
('I','J','K')) src(keycol, col1, col2)
ON trg.keycol = src.keycol
WHEN MATCHED THEN
UPDATE SET col1 = src.col1, col2 = src.col2
WHEN NOT MATCHED THEN
INSERT(keycol, col1, col2)
VALUES(src.keycol, src.col1, src.col2);
SELECT * FROM tablename;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1130 次 |
最近记录: |