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