SQL annak megállapítására, hogy egyetlen adatdarabot kulcs hajt-e végre egy frissítésben vagy beszúrásban

Oldal frissítve :
Oldal létrehozásának dátuma :

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.