SQL để xác định xem một phần dữ liệu duy nhất được thực thi bằng khóa trong Bản cập nhật hoặc Chèn

Trang Cập Nhật :
Ngày tạo trang :

Trong một quy trình như Cập nhật nếu có khóa hoặc Chèn nếu không có khóa, việc chọn thường được thực hiện dựa trên khóa và quy trình được xác định bằng cách kiểm tra xem có một trường hợp hay không. SQL Server 2008 cũng thêm một câu lệnh "hợp nhất" cho phép bạn thực hiện Cập nhật và Chèn (và sau đó Xóa) với một câu lệnh duy nhất. Tuy nhiên, đây là một so sánh của hai bảng và không phù hợp với dữ liệu duy nhất.

Trên thực tế, có một cách để dễ dàng cập nhật một hàng bằng cách xác định Cập nhật và Chèn mà không cần phải kiểm tra số lượng bản ghi bằng một câu lệnh đã chọn.

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

Từ khóa ở đây là "@@ROWCOUNT". @@ROWCOUNT có thể truy xuất số hàng mà SQL trước đó đã được áp dụng. Mã trước đó thực thi câu lệnh Cập nhật trước và nếu nó đã được cập nhật, @@ROWCOUNT trả về 1 hoặc lớn hơn, vì vậy nó không thực thi câu lệnh Chèn tiếp theo. Ngược lại, nếu không có hàng nào được cập nhật trong câu lệnh Cập nhật, @@ROWCOUNT trả về 0, vì vậy hãy thực hiện phán quyết Chèn bằng câu lệnh IF.

Vì SQL trên là một mẫu, hãy thay thế tên cột và giá trị cần cập nhật vào thời điểm thích hợp. @value chỉ là một tên biến đổi, vì vậy hãy thay thế nó bằng giá trị bạn muốn cập nhật.