try catchブロックを使用して以下のクエリのエラーをキャッチしようとしていますが、クエリがエラーをスローしても、クエリはcatchブロックに当たっていません。 「SQL Server 2008 R2のキャッチエラーが発生しません
メッセージ7314、レベル16、状態1、プロシージャproc_nameに、リンクサーバー用ライン97 OLE DBプロバイダー「SQLNCLI11」:私は、エラーの下に取得していますtry-catchブロックを使用せずにクエリを実行していた場合LINKEDSERVER "にテーブル" "DB_NAME"。 "dbo"。 "VIEW_NAME" "が含まれていません。テーブルが存在しないか、現在のユーザーにそのテーブルに対するアクセス許可がありません。 メッセージ2020、レベル16、状態1、行34 エンティティ "SP_NAME"に対して報告された依存関係には、すべての列への参照が含まれていない可能性があります。これは、エンティティが存在しないオブジェクトを参照するか、エンティティ内の1つ以上のステートメントにエラーがあるためです。照会を再実行する前に、エンティティーにエラーがなく、エンティティーが参照するすべてのオブジェクトが存在することを確認してください。
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.'[email protected]_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
IN "TをAREN CURRENT DB内のオブジェクトを決定古いスタイルのカンマ構文のJOINを使用しないでください。https://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause – Shawn
共有サーバーの権限をダブルチェックしてください。適切なユーザーが共有テーブルにアクセスできますか? – Shawn
@shawnサーバーで書き込みアクセス権と実行アクセス権を持っています – Shardul