我正在尝试为表 T1(int id,char name, float data) 插入/更新数据,该表在id
和上具有唯一的索引name
。
我SQLBulkOperation(SQL_ADD)
用来向表中添加记录并SQLBulkOperation(SQL_UPDATE_BY_BOOKMARK)
更新它们。
现在我的用例是如果记录已经存在,我必须更新记录,如果不存在则插入。为此,MySQL 提供了INSERT INTO ... ON DUPLICATE KEY UPDATE
.
如何在 SQL Server 中实现相同的功能?有没有其他有效的方法来做到这一点?
我libmsodbcsql-13.0.so.0.0
用来连接到 SQL Server。
SQL Server 2008 中引入的
MERGE
语句将是这里的常用建议。这是一个似乎未被充分利用的功能(在我的情况下,因为直到最近我还必须支持 SQL Server 2005)但非常强大。请参阅:
https ://learn.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql
https://technet.microsoft.com/en-us/library/bb522522(v=sql .105).aspx
MERGE
关于并发性(死锁本身(!))、性能、密钥一致性和其他错误,有许多问题需要注意:https ://www.mssqltips.com/sqlservertip/3074/use-caution- with-sql-servers-merge-statement/
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/73d2b0de-d6cc-4938-a303-b24d59c1be54/deadlock-on-simple-merge-statement?论坛=sqlgetstarted
https://sqlperformance.com/2013/02/t-sql-queries/another-merge-bug
另一种方法是使用包含在具有适当设置的事务中的多步骤过程(删除不再需要的内容、更新已经存在的内容、插入缺少的内容)。