SQL per determinar si una sola peça de dades s'executa amb clau en una actualització o insereix

Pàgina actualitzada :
Data de creació de la pàgina :

En un procés com Ara Actualitza si hi ha una clau o Insereix si no hi ha cap clau, normalment es realitza una selecció basada en la clau i el procés es determina comprovant si hi ha un cas. L'SQL Server 2008 també afegeix una sentència de "combinació" que us permet realitzar una actualització i una inserció (i després Suprimeix) amb una sola sentència. No obstant això, es tracta d'una comparació de dues taules i no és adequada per a dades úniques.

De fet, hi ha una manera d'actualitzar fàcilment una fila determinant Actualitza i Insereix sense haver de comprovar el nombre de registres amb una sentència selecta.

update [TableName]
set [ColumnName] = @value
--    : 他更新 SQL
where [KeyColumnName] = @value
--    : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
  [ColumnName]
--  : 他更新 SQL
)
values
(
  @value
--  : 他更新値
)

La paraula clau és "@@ROWCOUNT". El @@ROWCOUNT pot recuperar el nombre de files a les quals s'ha aplicat l'SQL anterior. El codi anterior executa primer la sentència Actualitza i, si s'ha actualitzat, @@ROWCOUNT retorna 1 o superior, de manera que no executa la següent sentència Insereix. Per contra, si no s'actualitza cap fila a la sentència Actualitza, @@ROWCOUNT retorna 0, de manera que executeu Insereix per sentència IF.

Com que l'SQL anterior és una plantilla, substituïu els noms i valors de columna que s'actualitzaran en el moment adequat. @value és només un nom variable, així que substituïu-lo pel valor que voleu actualitzar.