Problem
Sage Evolution doesn't properly refresh its stored procedures and views after upgrading to V7.10.101
Solution
Just use the scripts below to refresh all views and stored procedures.
Refresh views
Refresh Views
declare @vwTbl table (viewName varchar(356), ErrorNumber bigint, ErrorSeverity bigint, ErrorState varchar(100),ErrorProcedure varchar(100), ErrorLine bigint, ErrorMessage varchar(800)) --REFRESHING VIEWS: DECLARE @ViewName VARCHAR(256) DECLARE cViews CURSOR READ_ONLY FOR SELECT name from sys.views OPEN cViews FETCH NEXT FROM cViews INTO @ViewName WHILE @@FETCH_STATUS != -1 BEGIN BEGIN TRY EXEC SP_REFRESHVIEW @ViewName PRINT 'View ''' + @ViewName + ''' has been refreshed.' END TRY BEGIN CATCH BEGIN insert into @vwTbl SELECT @ViewName as ViewName ,ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_LINE() AS ErrorLine ,ERROR_MESSAGE() AS ErrorMessage; END END CATCH FETCH NEXT FROM cViews INTO @ViewName END CLOSE cViews DEALLOCATE cViews select * from @vwTbl GO
Refresh other SQL Objects (Stored Procedures, etc)
Refresh other SQL objects
--REFRESHING OTHER OBJECTS:
SET NOCOUNT ON;
DECLARE
@RowIndex AS SMALLINT = 1
, @ObjectName AS NVARCHAR(128)
, @Sql AS NVARCHAR(MAX)
-- Get list of objects (stored procedures, functions) to be refreshed
DECLARE @ObjectsTable AS Table (RowIndex SMALLINT IDENTITY(1,1), ObjectType nvarchar(60), ObjectName NVARCHAR(128), IsRefreshed BIT, Error NVARCHAR(MAX))
INSERT INTO @ObjectsTable (ObjectType, ObjectName, IsRefreshed)
SELECT O.type_desc, SCHEMA_NAME(O.schema_id) + '.' + O.name, 1
FROM
sys.sql_modules M
INNER JOIN sys.objects O ON O.object_id = M.object_id
WHERE
O.is_ms_shipped = 0
AND O.type_desc NOT IN ('VIEW')
ORDER BY O.type_desc, O.name
-- For each function/sp...
WHILE @RowIndex <= (SELECT COUNT(*) FROM @ObjectsTable)
BEGIN
SELECT @ObjectName = ObjectName
FROM @ObjectsTable
WHERE RowIndex = @RowIndex
SET @Sql = 'EXEC sp_refreshsqlmodule ''' + @ObjectName + ''''
BEGIN TRY
EXEC sp_executesql @Sql
END TRY
BEGIN CATCH
UPDATE @ObjectsTable
SET
IsRefreshed = 0,
Error = ERROR_MESSAGE()
WHERE RowIndex = @RowIndex
IF @@TRANCOUNT > 0
ROLLBACK TRAN
END CATCH
-- Process next object
SET @RowIndex = @RowIndex + 1
END
-- List all objects not refreshed
SELECT ObjectType, ObjectName, IsRefreshed, Error
FROM @ObjectsTable
WHERE IsRefreshed = 0
GO
Related articles
vwTbl
Related articles