De enige volledig database-agnostische oplossing, waarbij gebruik wordt gemaakt van enigszins moderne databases, is om de Update en vervolgens de Insert in twee bewerkingen aan te roepen. Sommige databases staan niet toe dat meerdere instructies in één bewerking worden verzonden en sommige databases retourneren mogelijk niet het aantal rijen dat door de update is beïnvloed, dus daar zou ik niet op vertrouwen.
Update MyTable
Set Data = 'Data'
Where KeyCol = 'key';
(aparte oproep)
Insert Into MyTable(KeyCol, Data)
Select 'key', 'Data'
From ( Select 1 As Value ) As Z
Where Not Exists (
Select 1
From MyTable As T1
Where T1.KeyCol = 'key'
);