2017-02-24 11 views
0

ビューまたはプロシージャを作成する必要があります。リンクされた50サーバーからデータを選択する必要がありますが、一部はオフライン(インターネットに接続できません)です。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 

のこの作品を持っている。しかし、それはまだ接続し、休憩スクリプト全体についてのエラーが発生します。 次に必要なことは、すべてのリンクサーバーとユニオンの結果を1つの大きな結果にする必要があります。

アイデア? ありがとう

+0

グローバルな一時テーブルを作成して、別々のテンポラリテーブル –

答えて

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 
関連する問題