Tất cả phụ thuộc vào lớp truy cập dữ liệu khách hàng của bạn. Nhiều khung công tác ORM dựa trên truy vấn một cách rõ ràng SCOPE_IDENTITY trong quá trình chèn.
Nếu bạn hoàn toàn kiểm soát lớp truy cập dữ liệu thì tốt hơn là trả về SCOPE_IDENTITY() làm tham số đầu ra. Việc đưa trả về trong một tập kết quả thêm các chi phí dữ liệu meta không cần thiết để mô tả tập kết quả và làm phức tạp mã để xử lý kết quả yêu cầu.
Nếu bạn muốn có một sự trở lại kết quả thiết lập, sau đó một lần nữa là đáng tốt hơn để sử dụng mệnh đề OUTPUT:
INSERT INTO MyTable (col1, col2, col3)
OUTPUT INSERTED.id, col1, col2, col3
VALUES (@col1, @col2, @col3);
Bằng cách này bạn có thể nhận được toàn bộ chèn hàng trở lại, trong đó có các cột mặc định và tính toán, và bạn nhận được một tập kết quả có chứa một hàng cho mỗi hàng được chèn vào, điều này làm việc đúng với chèn hàng loạt được đặt theo định hướng.
Nhìn chung, tôi không thể nhìn thấy một trường hợp đơn lẻ khi trả lại SCOPE_IDENTITY()
do tập hợp kết quả sẽ là một phương pháp hay.
Nguồn
2010-06-29 17:08:58
Điểm tốt khi trả về nhiều hàng nếu có nhiều lần chèn. Có lẽ gbn đánh bại bạn với điều đó, nhưng bạn đã triệt để hơn. Trong trường hợp cụ thể của tôi, tôi không sử dụng ORM và (hiện tại) sẽ không chèn nhiều bản ghi cùng một lúc. –
@Remus: bạn nói, "Nói chung, tôi không thể nhìn thấy một trường hợp duy nhất khi trở về SCOPE_IDENTITY() như là một tập hợp kết quả sẽ là một thực hành tốt." Sau đó, làm thế nào khác nó có thể được thực hiện? Bạn có ngụ ý việc sử dụng tổng thể SCOPE_IDENTITY() là thực hành không tốt? Trong ý nghĩa gì xin vui lòng? – Fandango68
@ Fernando68: Tôi nói bạn nên lấy nó làm thông số đầu ra, không phải là kết quả được đặt –