SQL untuk menentukan sama ada sekeping data dilaksanakan oleh kekunci dalam Kemas Kini atau Selitkan

Laman dikemaskini :
Tarikh penciptaan halaman :

Dalam proses seperti Kemas Kini jika terdapat kekunci atau Selitkan jika tiada kekunci, pilihan biasanya dilakukan berdasarkan kekunci, dan proses ditentukan dengan menyemak sama ada terdapat satu kes. SQL Server 2008 juga menambah pernyataan "gabungan" yang membolehkan anda melakukan Kemas Kini dan Sisipan (dan kemudian Padam) dengan satu kenyataan. Walau bagaimanapun, ini adalah perbandingan dua jadual dan tidak sesuai untuk data tunggal.

Sebenarnya, ada cara untuk mengemas kini baris dengan mudah dengan menentukan Kemas Kini dan Selitkan tanpa perlu menyemak bilangan rekod dengan pernyataan terpilih.

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

Kata kunci di sini ialah "@@ROWCOUNT". @@ROWCOUNT boleh mendapatkan semula bilangan baris yang digunakan oleh SQL sebelumnya. Kod sebelumnya melaksanakan pernyataan Kemas Kini terlebih dahulu, dan jika ia telah dikemas kini, @@ROWCOUNT mengembalikan 1 atau lebih besar, jadi ia tidak melaksanakan pernyataan Selitkan seterusnya. Sebaliknya, jika tiada baris dikemas kini dalam pernyataan Kemas Kini, @@ROWCOUNT mengembalikan 0, jadi laksanakan Masukkan oleh penghakiman pernyataan IF.

Oleh kerana SQL di atas ialah templat, gantikan nama dan nilai lajur yang akan dikemas kini pada masa yang sesuai. @value hanyalah nama pemboleh ubah, jadi gantikan ini dengan nilai yang ingin anda kemas kini.