我遇到了try/catch錯誤處理問題。 讓我們在我的(簡單)的代碼來看看:SQL-Server,TSQL,TRY-CATCH塊
BEGIN TRY
print 'important'
use myDB1; -- no problem, the myDB1 is in place...
select * from dbo.Tab1;
use myDB2;
--here error, the myDB2 is not there,
--but error handling doesn't jump into catch-block
select * from dbo.Tab2;
END TRY
BEGIN CATCH
print 'myDB2 is not there'
END CATCH
我知道,我可以說:
select * from myDB2.dbo.Tab2
而不改變爲MYDB2,但是當我需要檢查(例如..)如果表有一個標識
(((SELECT OBJECTPROPERTY(OBJECT_ID('myDB2.dbo.'+ @TableName), 'TableHasIdentity'))= 1)
我必須從MYDB2運行它,否則我會得到一個錯誤的結果。 那麼如何捕捉catch-block中的錯誤呢?
感謝您的幫助
Purclot
您是否試圖使用完全限定的名稱而不是更改數據庫上下文,如select * from myDB2.dbo.Tab2? – jean
順便說一句,如果你想檢查數據庫和對象是否存在,爲什麼不從sys.sysdatabases和sys.sysobjects中選擇? – jean
嗨,讓我, 正如我所說:我需要改變到數據庫(所以它不是一個解決方案:select * from myDB2.dbo.Tab2 ...)。 當我使用:if(存在(從master.dbo.sysdatabase選擇其中[名稱] ='myDB2')1使用myDB2,我會得到一個錯誤 – Purclot