Pre*_*cco 15 sql-server-2008 upsert
不知道大家有没有遇到过类似UPSERT这个概念的T-SQL命令?使用选项 (1) 或 (2) 执行 INSERT|UPDATE 操作似乎过于复杂且容易出错。
客观的
确保所需的记录(在本例中为 employee_id 1)是最新的,而不必实质上编写相同的查询两次。
语境
选项
执行 SQL UPDATE... 检查 @@rowcount = 0 和 @@error = 0 ... 如果需要,执行 SQL INSERT
/sf/ask/77470221/ "Update using @@rowcount"
http://technet.microsoft.com/en-us/library/bb510625.aspx "T-SQL Merge"
UPSERT EXAMPLE
UPSERT 员工 (employee_id、employee_number、job_title、first_name、middle_name、surname、modified_at) VALUES (1, '00-124AB37', 'Manager', 'John', 'T', 'Smith', GetDate());
Aar*_*and 14
我认为对此的简单答案是否定的。MERGE是微软对更复杂的UPSERT逻辑的回答。你甚至没有列出最糟糕的方法:
IF (SELECT COUNT ... ) > 0
UPDATE
ELSE
INSERT
Run Code Online (Sandbox Code Playgroud)
我只是在嘴里吐了一点打字,但这实际上是我最常看到的。
在任何情况下,如果MERGE对您来说不够灵活或不够强大,我建议您通过http://connect.microsoft.com/sql/向 Microsoft 提交功能请求,并彻底解释您的业务案例。只要你坚持你提议的语法的真正优势,你MERGE就会得到我的投票。如果你太在意“容易出错”的部分,我就不太可能买账了。为什么?因为你可以胖手指任何语句。
也就是说,我认为这里没有任何人可以专门为您做任何事情。您应该调查潜在的问题MERGE:
http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/
| 归档时间: |
|
| 查看次数: |
29004 次 |
| 最近记录: |