Người dùng nhập cụm từ tìm kiếm vào một hộp và giá trị đó được chuyển đến một thủ tục được lưu trữ và được kiểm tra đối với một vài trường khác nhau trong cơ sở dữ liệu. Các trường này không phải luôn luôn có cùng kiểu dữ liệu.
Một trường (số điện thoại) bao gồm tất cả các số, vì vậy khi kiểm tra nó sẽ loại bỏ tất cả các ký tự không phải là số từ chuỗi bằng hàm .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Vấn đề là, chức năng này đột ngột ngừng hoạt động trong trường hợp có lỗi sau:
Msg 6533, Cấp 16, Bang 49, Dòng 2 AppDomain MyDBName.dbo [runtime] .1575 đã được tải bằng chính sách leo thang để đảm bảo tính nhất quán của ứng dụng của bạn. Hết bộ nhớ xảy ra trong khi truy cập một tài nguyên quan trọng. System.Threading.ThreadAdortException: Ngoại lệ của loại 'System.Threading.ThreadAdortException' đã bị ném. System.Threading.ThreadAdortException:
Tôi đã thử các đề xuất được đăng trên MSDN cho lỗi này, nhưng vẫn gặp sự cố. Tại thời điểm này, chuyển sang máy chủ 64 bit không phải là một lựa chọn cho chúng tôi.
Tôi biết khởi động lại máy chủ sẽ giải phóng bất kỳ bộ nhớ nào mà nó đã giữ, nhưng đó không phải là giải pháp khả thi trong môi trường sản xuất.
Có cách nào để loại bỏ các ký tự không phải là số trong chuỗi trong SQL Server 2005 chỉ bằng T-SQL không?