ฉันได้เขียน proc ที่เก็บไว้ซึ่งจะทำการอัปเดตหากมีบันทึกอยู่มิฉะนั้นจะทำการแทรก มีลักษณะดังนี้:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
ตรรกะของฉันที่อยู่เบื้องหลังการเขียนด้วยวิธีนี้คือการอัปเดตจะทำการเลือกโดยปริยายโดยใช้ where clause และถ้าสิ่งนั้นส่งกลับ 0 ดังนั้นการแทรกจะเกิดขึ้น
ทางเลือกอื่นในการทำเช่นนี้คือทำการเลือกจากนั้นขึ้นอยู่กับจำนวนแถวที่ส่งคืนไม่ว่าจะอัปเดตหรือแทรก สิ่งนี้ฉันถือว่าไม่มีประสิทธิภาพเพราะถ้าคุณจะทำการอัปเดตมันจะทำให้เกิดการเลือก 2 ครั้ง (การเรียกเลือกอย่างชัดเจนครั้งแรกและครั้งที่สองโดยนัยในตำแหน่งของการอัปเดต) หาก proc ทำการแทรกก็จะไม่มีความแตกต่างในด้านประสิทธิภาพ
ตรรกะของฉันอยู่ที่นี่หรือไม่? นี่เป็นวิธีที่คุณจะรวมส่วนแทรกและอัปเดตลงใน proc ที่จัดเก็บไว้หรือไม่?