My interests are in: - Microsoft Visual Studio .Net - Microsoft SQL Server. - Delphi. - ERP. - DNS, SOA, SAS, ... etc.

Monday, February 18, 2008

SQL: If Exists Update Else Insert

This is a pretty common situation that comes up when performingdatabase operations. A stored procedure is called and the data needsto be updated if it already exists and inserted if it does not. If werefer to the Books Online documentation, it gives examples that aresimilar to:
IF EXISTS (SELECT * FROM Table1 WHERE Column1=’SomeValue’) UPDATE Table1 SET (…) WHERE Column1=’SomeValue’ELSE INSERT INTO Table1 VALUES (…)
Thisapproach does work, however it might not always be the best approach. This will do a table/index scan for both the SELECT statement and theUPDATE statement. In most standard approaches, the following statementwill likely provide better performance. It will only perform onetable/index scan instead of the two that are performed in the previousapproach.
UPDATE Table1 SET (…) WHERE Column1=’SomeValue’IF @@ROWCOUNT=0 INSERT INTO Table1 VALUES (…)
The saved table/index scan can increase performance quite a bit as the number of rows in the targeted table grows. (Original)