Tôi đã viết một proc được lưu trữ sẽ thực hiện cập nhật nếu bản ghi tồn tại, nếu không nó sẽ thực hiện chèn. Nó trông giống như sau:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
Logic của tôi đằng sau việc viết nó theo cách này là bản cập nhật sẽ thực hiện một lựa chọn ngầm bằng cách sử dụng mệnh đề where và nếu điều đó trả về 0 thì việc chèn sẽ diễn ra.
Cách thay thế để thực hiện theo cách này sẽ là thực hiện một lựa chọn và sau đó dựa trên số hàng được trả về hoặc thực hiện cập nhật hoặc chèn. Điều này tôi coi là không hiệu quả vì nếu bạn cập nhật, nó sẽ gây ra 2 lựa chọn (lệnh gọi chọn rõ ràng đầu tiên và ẩn thứ hai ở nơi cập nhật). Nếu proc thực hiện chèn thì sẽ không có sự khác biệt về hiệu quả.
Logic của tôi có âm thanh ở đây không? Đây có phải là cách bạn kết hợp chèn và cập nhật vào một proc được lưu trữ không?