在我的查詢我必須從分貝,是不是我的控制之下連接表。這有時會讓我瘋狂,因爲有時候這個數據庫無法訪問(請不要問我爲什麼),這打破了我的查詢。我加入的字段是不根本對我的業務,我想我的應用程序正常工作,即使這些字段是不是在同一時間訪問。SQL服務器:在查詢錯誤捕獲
這裏的數據結構,我沒有自己:
[DBOutOfControl].[dbo].[Table1]:
[Field1]
[Field2]
[DBOutOfControl].[dbo].[Table2]:
[Field1]
[Field2]
[Field3]
這裏是我的表:
[DBInMyControl].[dbo].[Table3]:
[Field1]
我原來的查詢看起來就像這樣:
SELECT [Table3].[MyID],
[ForeignDataQry].[A],
[ForeignDataQry].[B]
FROM [DBInMyControl].[dbo].[Table3]
LEFT JOIN
(SELECT [Table1].[Field1] AS [MyID],
[Table1].[Field2] AS [A],
[SubQry].[Field2] AS [B]
FROM [DBOutOfControl].[dbo].[Table1]
LEFT JOIN
(SELECT [Table2].[Field1],
[Table2].[Field2]
FROM [DBOutOfControl].[dbo].[Table2]
WHERE [Table2].[Field3] = 'Where') AS [SubQry] ON [Table1].[Field1] = [SubQry].[Field1]) AS [ForeignDataQry] ON [Table3].[MyID]=[ForeignDataQry].[MyID]
如何如果[ForeignDataQry]產生錯誤,結果可能是:
[MyID] [A] [B]
1 NULL NULL
否則
[MyID] [A] [B]
1 Va1 Val2
有什麼可以做,服務器端?
的[防止錯誤可能的複製時,目標數據庫中恢復模式(SQL編制)(https://stackoverflow.com/questions/18630367/prevent-error-when-target-database-in-restore-mode-sql-preparation) – Tanner
當另一個數據庫不能訪問你的代碼不能被編譯,所以你唯一能做的就是嘗試在另一個(內部)上下文中執行它,用動態sql包裝它,如果它成功則什麼也不做,如果沒有,外層try..catch會捕獲它,然後你執行另一個代碼而不引用不可訪問的對象 – sepupic