tôi muốn đảm bảo rằng tất cả các thủ tục được lưu trữ vẫn còn hợp lệ về cú pháp. (Điều này có thể xảy ra nếu ai đó đổi tên/xóa bảng/cột).Cú pháp kiểm tra tất cả các thủ tục đã lưu?
Ngay bây giờ giải pháp của tôi để kiểm tra cú pháp của tất cả các thủ tục lưu trữ là để đi vào Enterprise Manager, chọn thủ tục lưu trữ đầu tiên trong danh sách, và sử dụng thủ tục:
- Nhập
- Alt + C
- thoát
- thoát
- Down arrow
- Chuyển đến 1
Nó hoạt động, nhưng nó khá tẻ nhạt. tôi muốn một stored procedure gọi
SyntaxCheckAllStoredProcedures
như thủ tục lưu trữ khác tôi đã viết rằng làm điều tương tự cho quan điểm:
RefreshAllViews
Đối với tất cả mọi người lợi ích, RefreshAllViews:
RefreshAllViews.prc
CREATE PROCEDURE dbo.RefreshAllViews AS
-- This sp will refresh all views in the catalog.
-- It enumerates all views, and runs sp_refreshview for each of them
DECLARE abc CURSOR FOR
SELECT TABLE_NAME AS ViewName
FROM INFORMATION_SCHEMA.VIEWS
OPEN abc
DECLARE @ViewName varchar(128)
-- Build select string
DECLARE @SQLString nvarchar(2048)
FETCH NEXT FROM abc
INTO @ViewName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLString = 'EXECUTE sp_RefreshView '[email protected]
PRINT @SQLString
EXECUTE sp_ExecuteSQL @SQLString
FETCH NEXT FROM abc
INTO @ViewName
END
CLOSE abc
DEALLOCATE abc
Đối với lợi ích của mọi người, một thủ tục lưu trữ để đánh dấu tất cả các thủ tục lưu trữ như cần một biên dịch lại (đánh dấu một thủ tục lưu trữ cho biên dịch lại sẽ không cho bạn biết nếu nó là cú pháp hợp lệ):
RecompileAllStoredProcedures.prc
CREATE PROCEDURE dbo.RecompileAllStoredProcedures AS
DECLARE abc CURSOR FOR
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.routines
WHERE ROUTINE_TYPE = 'PROCEDURE'
OPEN abc
DECLARE @RoutineName varchar(128)
-- Build select string once
DECLARE @SQLString nvarchar(2048)
FETCH NEXT FROM abc
INTO @RoutineName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLString = 'EXECUTE sp_recompile '[email protected]
PRINT @SQLString
EXECUTE sp_ExecuteSQL @SQLString
FETCH NEXT FROM abc
INTO @RoutineName
END
CLOSE abc
DEALLOCATE abc
Vì mục đích đầy đủ, quy trình UpdateAllStatistics. Điều này sẽ cập nhật tất cả thống kê trong cơ sở dữ liệu bằng cách thực hiện một dữ liệu đầy đủ quét:
RefreshAllStatistics.prc
CREATE PROCEDURE dbo.RefreshAllStatistics AS
EXECUTE sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'
Vui lòng xem gắn thẻ của bạn. Đây là câu hỏi _only_ trên trang web được gắn thẻ 'sqlserver'. Sử dụng 'sql-server' để thay thế. –