Refresh all views, functions, stored procedures in SQL SERVER

This script is used to refresh related views when fields are deleted or added, and to check view, function, stored procedure validity.

SQL2005 and below

--View, stored procedure, function name
DECLARE @NAME NVARCHAR(255);
--local cursor
DECLARE @CUR CURSOR
SET @CUR=CURSOR SCROLL DYNAMIC FOR
SELECT NAME FROM DBO.SYSOBJECTS
	WHERE NAME NOT IN ('SYSCONSTRAINTS','SYSSEGMENTS')
		AND
		(
			OBJECTPROPERTY(ID, N'IsView') = 1 -- view
			OR OBJECTPROPERTY(ID,N'IsProcedure') = 1 -- stored procedure
			OR OBJECTPROPERTY(ID,N'IsScalarFunction') = 1 --scalar function
			OR OBJECTPROPERTY(ID,N'IsTableFunction') = 1 -- title function
			OR OBJECTPROPERTY(ID,N'IsInlineFunction') = 1 -- inline function
		);

OPEN @CUR;
FETCH NEXT FROM @CUR INTO @NAME

WHILE (@@FETCH_STATUS=0)
BEGIN

	DECLARE @OldText NVARCHAR(MAX);
	DECLARE @NewText NVARCHAR(MAX);

	--Read the creation script, and merge it when the script is too long and divided into multiple records
	SELECT @OldText=@OldText + CHAR(10) + CHAR(13) + RTRIM(TEXT) FROM SYSCOMMENTS WHERE ID = OBJECT_ID(@NAME);

	--replace create script with update script
	SET @NewText=REPLACE(@OldText,N'CREATE VIEW',N'ALTER VIEW');
	SET @NewText=REPLACE(@NewText,N'CREATE PROCEDURE',N'ALTER PROCEDURE');
	SET @NewText=REPLACE(@NewText,N'CREATE FUNCTION',N'ALTER FUNCTION');
	
	BEGIN TRY
		EXEC(@NewText);
	END TRY
	BEGIN CATCH
		PRINT N'---------------------------------------------------------------------------';
		PRINT @NAME + N' : ' + ERROR_MESSAGE();
		--PRINT @OldText;
		PRINT N'---------------------------------------------------------------------------';
	END CATCH

	FETCH NEXT FROM @CUR INTO @NAME

END

CLOSE @CUR;
DEALLOCATE @CUR;

SQL2008 and above

--View, stored procedure, function name  
DECLARE @NAME NVARCHAR(255);  
--local cursor  
DECLARE @CUR CURSOR    
SET @CUR=CURSOR SCROLL DYNAMIC FOR   
SELECT NAME FROM DBO.SYSOBJECTS   
    WHERE NAME NOT IN ('SYSCONSTRAINTS','SYSSEGMENTS')  
        AND  
        (  
            OBJECTPROPERTY(ID, N'IsView') = 1 -- view  
            OR OBJECTPROPERTY(ID,N'IsProcedure') = 1 -- stored procedure  
            OR OBJECTPROPERTY(ID,N'IsScalarFunction') = 1 --scalar function  
            OR OBJECTPROPERTY(ID,N'IsTableFunction') = 1 -- title function  
            OR OBJECTPROPERTY(ID,N'IsInlineFunction') = 1 -- inline function  
        );  
  
OPEN @CUR;  
FETCH NEXT FROM @CUR INTO @NAME  
  
WHILE (@@FETCH_STATUS=0)  
BEGIN     
    BEGIN TRY
		BEGIN TRAN  
		EXEC SP_REFRESHSQLMODULE @NAME;
		COMMIT
    END TRY  
    BEGIN CATCH  
	    ROLLBACK
        PRINT N'---------------------------------------------------------------------------';  
        PRINT @NAME + N' : ' + ERROR_MESSAGE();  
        --PRINT @OldText;  
        PRINT N'---------------------------------------------------------------------------';  
    END CATCH  
  
    FETCH NEXT FROM @CUR INTO @NAME  
  
END  
  
CLOSE @CUR;  
DEALLOCATE @CUR;  



Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325489557&siteId=291194637