2017-02-24 23 views
0

我需要創建視圖或過程,從50個鏈接的服務器中選擇一些數據,但其中一些可能處於脫機狀態(不良Internet)。SQL如何結合從連接服務器中選擇連通性檢查

我有這樣一段代碼

declare @srvr nvarchar(128), @retval int; 
set @srvr = 'SERVER103'; 
begin try 
    exec @retval = sys.sp_testlinkedserver @srvr; 
end try 
begin catch 
    set @retval = sign(@@error); 
end catch; 
if @retval = 0 
    select sel1.sum1, sel1.sum2, sel2.sum1, sel2.sum2 from 
     (select sum(column1) as sum1, sum(column2) as sum2 from [SERVER103].[dbo].[table] where date like '201702%' group by column1, column2) as sel1 
     (select sum(column1) as sum1, sum(column2) as sum2 from [SERVER103].[dbo].[table2] where date like '201702%' group by column1, column2) as sel2 

但它仍然會引發錯誤有關連接和破壞整個腳本。 接下來我需要的東西必須經過所有鏈接的服務器和聯合結果才能成爲一個大的結果。

任何想法? 謝謝

+0

創建全局臨時表tabel來存儲數據和檢索usein distinct ..from臨時表 –

回答

0

以下代碼使用遊標來遍歷每個鏈接的服務器。如果連接良好,則添加動態sql,否則會打印一條消息。最終的動態sql只是爲了很好的鏈接:

declare @loop as int=1 
declare @srvname as nvarchar(100) 
declare @sql as nvarchar(max)=N'' 
declare @Date as varchar(10) = '201702%' 
declare srvcursor cursor for select srvname from sysservers where srvname <> @@SERVERNAME 
open srvcursor 
fetch next from srvcursor into @srvname 
WHILE @@FETCH_STATUS = 0 
    begin 
    begin try 
    exec sys.sp_testlinkedserver @srvname 
    set @[email protected]+N'select sel1.sum1, sel1.sum2, sel2.sum1, sel2.sum2 from 
     (select sum(column1) as sum1, sum(column2) as sum2 from [' + @srvname + N'].[dbo].[table] where date like ''' + @Date + N''' group by column1, column2) as sel1 
     (select sum(column1) as sum1, sum(column2) as sum2 from [' + @srvname + N'].[dbo].[table2] where date like ''' + @Date + N''' group by column1, column2) as sel2 
     UNION ' 
    end try 
    begin catch 
    print @srvname + 'is broken.' 
    end catch 
    fetch next from srvcursor into @srvname 
    end 
if @sql <> N'' 
    begin 
    set @sql = left(@sql, len(@sql)-6) 
    print @sql 
    --exec(@sql) 
    end 
close srvcursor 
deallocate srvcursor