câu trả lời của gbn là tốt nhất - nhưng khi bạn có SCHEMABINDING, điều này thường ngăn bạn thực hiện các thay đổi cơ bản mà không xóa SCHEMABINDING trước rồi thay thế nó khi tạo lại mô-đun. Bạn không thể sử dụng SCHEMABINDING nếu đối tượng của bạn tham chiếu đến các đối tượng bên ngoài cơ sở dữ liệu.
Nếu khó khăn này quá lớn, bạn không muốn hoặc không thể sử dụng SCHEMABINDING, thì hãy sử dụng sp_refreshsqlmodule trong một số loại quy trình thông thường mà bạn chạy để kiểm tra các mô-đun SQL của mình để tìm lỗi trước khi chúng thực sự được sử dụng (nó có thể được chạy trên bất kỳ chế độ xem phi cấu trúc nào, UDF, proc được lưu trữ, v.v.) là bạn của bạn.
Bạn có thể sử dụng cả hai kỹ thuật cùng nhau - bạn không thể (và không cần) chạy sp_refreshsqlmodule chống lại các đối tượng schemabound.
ví dụ:bạn chỉ có thể chạy nó trên các mô-đun sau:
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE (
OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME)), N'IsSchemaBound') IS NULL
OR OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME)),
N'IsSchemaBound') = 0
)