2014-07-25 17 views
5

Khi tôi thực hiện cập nhật trên cơ sở dữ liệu SQL Server của mình, tôi nhận được kết quả của các hàng bị ảnh hưởng bởi cập nhật AND các hàng bị ảnh hưởng của một số trình kích hoạt.Chỉ nhận kết quả truy vấn cập nhật

Vì vậy, ví dụ, một bản cập nhật được thực hiện trực tiếp trên cơ sở dữ liệu:

UPDATE: (32 row(s) affected) 
Trigger1: (1 row(s) affected) 
Trigger2: (2 row(s) affected) 
... 

Bây giờ khi tôi thực hiện _context.Database.ExecuteSqlCommand(query, params) tôi luôn luôn nhận được tổng của tất cả những kết quả đó, trong ví dụ của tôi giá trị kết quả là 35.

Tôi chỉ cần kết quả của số UPDATE, trong ví dụ 32 của mình.

Có khả năng bỏ qua kết quả của trình kích hoạt không?

Trả lời

2

Tôi nghĩ câu trả lời của Alireza có ý nghĩa nhất nếu có thể thay đổi trình kích hoạt nhưng nếu bạn không thể thay đổi cuộc gọi cơ sở dữ liệu để thực hiện câu lệnh cập nhật và trả lại @@ROWCOUNT?

_context.Database.SqlQuery<int>("update xx ...; select @@ROWCOUNT"); 

tôi không thể tìm thấy bất kỳ tài liệu trên MSDN nhưng this question khẳng định rằng @@ ROWCOUNT không bị ảnh hưởng bởi trigger.

+0

ý tưởng hay, tôi sẽ thử! –

+0

Đây có thể là giải pháp tốt hơn về trường hợp đặc biệt này – Alireza

+0

vâng, trong trường hợp của tôi là chắc chắn. Nếu không, giải pháp sạch hơn là của bạn @Alireza –

3

Đặt SET NOCOUNT ON trên dòng đầu tiên của trình kích hoạt của bạn.

+0

không thể thay đổi trình kích hoạt, nếu không nó sẽ là một giải pháp tốt đẹp. –

+0

Đây có phải là do sự cho phép không? Hoặc có những lý do khác? – Alireza

+0

Vâng, đó là một cơ sở dữ liệu lớn, được sử dụng bởi một số chương trình. Vì vậy, nó không phải là dễ dàng ;-) –

Các vấn đề liên quan