Tôi luôn nghĩ rằng việc cập nhật một thủ tục được lưu trữ là điều tôi có thể làm trong khi người dùng đang tích cực sử dụng hệ thống.
Nhưng tôi hiện đang thử nghiệm một bản cập nhật cho một thủ tục được lưu trữ và trong khi một cuộc gọi dài đến sproc đang được thực hiện (nó đã hơn 4 phút trong cuộc gọi), tôi đã cập nhật sproc. (Tôi đã dự định thử một kế hoạch truy vấn khác trong một cửa sổ riêng biệt.)
Khi tôi quay trở lại hoạt động lâu dài, tôi đã gặp lỗi này:
The definition of object 'MySprocName' has changed since it was compiled.
Lỗi này dường như nói rằng bất kỳ sproc nào đang được thực thi tích cực sẽ thất bại nếu định nghĩa của sproc đó được cập nhật. (Tôi nghĩ rằng một khi một sproc bắt đầu chạy, nó sẽ sử dụng kế hoạch đó cho phần còn lại của hoạt động mặc dù có những thay đổi về định nghĩa.)
Điều này có đúng không? Tôi có cần phải có thời gian chết để cập nhật định nghĩa của một sproc không?
WITH RECOMPILE
chưa? Đây là một tùy chọn cấp thủ tục để đặt thủ tục biên dịch lại sau mỗi lần chạy. Điều này có nghĩa là kế hoạch sẽ luôn được biên dịch lại và do đó tránh các kế hoạch được lưu trong bộ nhớ cache được sử dụng lại.