I am trying to catch the errors in the below query using try catch block but even though query is throwing error, query is not hitting catch block. When I am executing the query without using TRY-CATCH block I am getting below error :
Msg 7314, Level 16, State 1, Procedure PROC_NAME, Line 97 The OLE DB provider "SQLNCLI11" for linked server "LINKEDSERVER" does not contain the table ""DB_NAME"."dbo"."VIEW_NAME"". The table either does not exist or the current user does not have permissions on that table. Msg 2020, Level 16, State 1, Line 34 The dependencies reported for entity "SP_NAME" might not include references to all columns. This is either because the entity references an object that does not exist or because of an error in one or more statements in the entity. Before rerunning the query, ensure that there are no errors in the entity and that all objects referenced by the entity exist.
SELECT DISTINCT NAME INTO #ALL_SPS FROM SYSOBJECTS SO,SYSCOMMENTS SC WHERE SO.ID = SC.ID 
AND TEXT LIKE '%LINKEDSERVER%'
CREATE TABLE #ERRORS
(
    ERRORNUMBER VARCHAR(100),
    ERRORSEVERITY   VARCHAR(100),
    ERRORSTATE  VARCHAR(100),
    ERRORPROCEDURE  VARCHAR(100),
    ERRORLINE   VARCHAR(100),
    ERRORMESSAGE VARCHAR(100)
)
CREATE TABLE #TEMP(SP_NAME VARCHAR(500),DB VARCHAR(100), LINKEDSERVER VARCHAR(100))
BEGIN    
DECLARE @SP_NAME VARCHAR(MAX)  
DECLARE @STARTTIME DATETIME =GETDATE()
DECLARE HDR_CURSOR CURSOR FOR   
SELECT NAME FROM #ALL_SPS --IS TEMP TABLE IMPORTED FROM SHARED EXCEL 
OPEN HDR_CURSOR    
FETCH NEXT FROM HDR_CURSOR INTO @SP_NAME
WHILE (@@FETCH_STATUS = 0 )    
   BEGIN    
BEGIN TRY
BEGIN TRANSACTION;
    INSERT INTO #TEMP
    SELECT  
    TBLSQLREFERENCEDENTITY.REFERENCED_ENTITY_NAME AS REFERENCEDENTITY,  
    COALESCE(REFERENCED_DATABASE_NAME,DB_NAME()) AS REFERENCEDDATABASE,  
    COALESCE(TBLSQLREFERENCEDENTITY.REFERENCED_SERVER_NAME,'CURRENT SERVER') AS REFERENCEDSERVER   
    FROM SYS.DM_SQL_REFERENCED_ENTITIES('DBO.'+@SP_NAME, 'OBJECT') TBLSQLREFERENCEDENTITY  
    WHERE  TBLSQLREFERENCEDENTITY.REFERENCED_SERVER_NAME ='LINKEDSERVER'
    GROUP BY REFERENCED_ENTITY_NAME,REFERENCED_DATABASE_NAME,REFERENCED_SERVER_NAME 
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
INSERT INTO #ERRORS
SELECT 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 CATCH
  FETCH NEXT FROM HDR_CURSOR INTO @SP_NAME
 END    
 CLOSE HDR_CURSOR    
 DEALLOCATE HDR_CURSOR    
 SELECT DATEDIFF(MS,@STARTTIME,GETDATE()) 'TIME TAKEN IN MS'
 SELECT DISTINCT * FROM #TEMP
 SELECT DISTINCT * FROM #ERRORS
END
 
    