Die einzige vollständig datenbankunabhängige Lösung, die einigermaßen moderne Datenbanken verwendet, besteht darin, das Update und dann das Insert in zwei Vorgängen aufzurufen. Einige Datenbanken erlauben keine mehrfachen Anweisungen, die in einer einzigen Operation gesendet werden, und einige Datenbanken geben möglicherweise nicht die Anzahl der Zeilen zurück, die von der Aktualisierung betroffen sind, daher würde ich mich nicht darauf verlassen.
Update MyTable
Set Data = 'Data'
Where KeyCol = 'key';
(separater Aufruf)
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'
);