SQL til at bestemme, om et enkelt stykke data udføres efter nøgle i en opdatering eller indsæt

Side opdateret :
Dato for oprettelse af side :

I en proces som Opdater, hvis der er en nøgle eller Indsæt, hvis der ikke er nogen nøgle, udføres der normalt en markering baseret på nøglen, og processen bestemmes ved at kontrollere, om der er en sag. SQL Server 2008 tilføjer også en "flet"-sætning, der giver dig mulighed for at udføre en opdatering og en Indsæt (og derefter Slet) med en enkelt sætning. Dette er imidlertid en sammenligning af to tabeller og er ikke egnet til enkeltdata.

Faktisk er der en måde at nemt opdatere en række ved at bestemme Opdater og Indsæt uden at skulle kontrollere antallet af poster med en valgt sætning.

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

Nøgleordet her er "@@ROWCOUNT". Den @@ROWCOUNT kan hente antallet af rækker, som den forrige SQL blev anvendt på. Den foregående kode udfører opdateringssætningen først, og hvis den er blevet opdateret, returnerer @@ROWCOUNT 1 eller derover, så den udfører ikke den næste Indsæt sætning. Omvendt, hvis ingen række opdateres i opdateringssætningen, returnerer @@ROWCOUNT 0, så udfør Indsæt ved IF-sætningsdom.

Da ovenstående SQL er en skabelon, skal du erstatte kolonnenavne og værdier, der skal opdateres på det rette tidspunkt. @value er bare et variabelnavn, så erstat dette med den værdi, du vil opdatere.