我有一個SSRS報告中的共享數據集,用於在嘗試檢索表之前測試鏈接服務器是否可用。SQL Select基於可用服務器/表
我沒有做的是有時他們做一個數據重建(它的部分特定的軟件),它會刪除所有表,包括一個參考。
所以我得到一個問題,即鏈接的服務器處於活動狀態,但無法找到我之後的表。
我怎樣才能讓這個查詢都測試鏈接的服務器,看看錶是否可用,如果都不是真的運行我的底部的'Catch'聲明。
我需要測試表是
[FIRST-W2K12-SQL.HQ.FIRST.CO.UK] .First_ICP.dbo.ic_brpolicy
BEGIN TRY
exec sp_testlinkedserver [FIRST-W2K12-SQL.HQ.FIRST.CO.UK];
SELECT DISTINCT [Brand] FROM InfoCentre.dbo.ic_brpolicy
WHERE Brand IS NOT NULL
UNION ALL
SELECT DISTINCT [Brand] FROM [FIRST-W2K12-SQL.HQ.FIRST.CO.UK].First_ICP.dbo.ic_brpolicy
WHERE Brand IS NOT NULL
END TRY
BEGIN CATCH
SELECT 'Error Retrieving Bracknell Brands'
UNION
SELECT DISTINCT [Brand] FROM InfoCentre.dbo.ic_brpolicy
WHERE Brand IS NOT NULL
END CATCH
我曾嘗試做這裏本
BEGIN TRY
exec sp_testlinkedserver [FIRST-W2K12-SQL.HQ.FIRST.CO.UK];
IF NOT EXISTS (SELECT * FROM [FIRST-W2K12-SQL.HQ.FIRST.CO.UK].master.INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = N'ic_brpolicy')
BEGIN
RAISERROR('Table Doesnt Exist',16,1)
END
IF NOT EXISTS (SELECT * FROM [FIRST-W2K12-SQL.HQ.FIRST.CO.UK].master.INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = N'icp_brpolicy')
BEGIN
RAISERROR('Table Doesnt Exist',16,1)
END
SELECT DISTINCT [Brand] FROM InfoCentre.dbo.ic_brpolicy
WHERE Brand IS NOT NULL
UNION ALL
SELECT DISTINCT [Brand] FROM [FIRST-W2K12-SQL.HQ.FIRST.CO.UK].First_ICP.dbo.ic_brpolicy
WHERE Brand IS NOT NULL
END TRY
BEGIN CATCH
SELECT 'Error Retrieving Bracknell Brands'
UNION
SELECT DISTINCT [Brand] FROM InfoCentre.dbo.ic_brpolicy
WHERE Brand IS NOT NULL
END CATCH
你的代碼看起來很好,你有什麼問題?如果服務器無法訪問,則會進入cath模塊。如果表無法訪問,它也可以 – sepupic
我看到的唯一奇怪的事情就是* master *中的* user *表* – sepupic
@sepupic請參閱IF NOT EXISTS的問題,它仍嘗試從表所以它不會去CATCH聲明。 – Lynchie