SQL annak megállapítására, hogy egyetlen adatdarabot kulcs hajt-e végre egy frissítésben vagy beszúrásban
Egy olyan folyamatban, mint a Frissítés kulcs vagy a Beszúrás, ha nincs kulcs, a kijelölés általában a kulcs alapján történik, és a folyamatot úgy határozzák meg, hogy ellenőrizzük, hogy van-e egy eset. Az SQL Server 2008 egy "merge" utasítást is hozzáad, amely lehetővé teszi a frissítés és a Beszúrás (majd Törlés) egyetlen utasítással történő végrehajtását. Ez azonban két tábla összehasonlítása, és nem alkalmas egyetlen adatra.
Valójában van egy módja annak, hogy egyszerűen frissítsen egy sort a Frissítés és a Beszúrás meghatározásával anélkül, hogy ellenőriznie kellene a rekordok számát egy select utasítással.
update [TableName]
set [ColumnName] = @value
-- : 他更新 SQL
where [KeyColumnName] = @value
-- : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
[ColumnName]
-- : 他更新 SQL
)
values
(
@value
-- : 他更新値
)
A kulcsszó itt a "@@ROWCOUNT". A @@ROWCOUNT lekérheti azoknak a soroknak a számát, amelyekre az előző SQL-t alkalmazták. Az előző kód először a Frissítési utasítást hajtja végre, és ha frissült, @@ROWCOUNT 1-es vagy annál nagyobb értéket ad vissza, így nem hajtja végre a következő Beszúrás utasítást. Ezzel szemben, ha az Update utasításban egyetlen sor sem frissül, @@ROWCOUNT 0-t ad vissza, ezért hajtsa végre az Insert by IF utasítás ítéletét.
Mivel a fenti SQL sablon, cserélje ki a megfelelő időben frissítendő oszlopneveket és értékeket. @value csak egy változónév, ezért cserélje le ezt a frissíteni kívánt értékre.