我有一个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