0

さまざまなリンク サーバーに接続する select into ステートメントを多数含むスクリプトがあります。

スクリプトを複数回実行できるようにしたいのですが、そのたびにサーバーとデータベースが変更され、いくつかのテーブル名が変更されます。

最初は次のように変数を使用してサーバーを定義することを望んでいましたが、もちろん、それらはローカル変数にすぎないため、スコープ外になります。

declare @table_that_changes varchar(100) 
declare @linked_server1 varchar(20)
declare @linked_server2 varchar(20)
declare @DB_onserver1 varchar(100) 
declare @DB_onserver2 varchar(100)
select @linked_server1 = '[server109]',
       @linked_server2 = '[server104]',
       @DB_onserver1 = '[database203434]',
       @DB_onserver2= '[database416541]',
       @table_that_changes = 'LossTable_2191'

これらの値を保存する最良の方法は何ですか?(たとえば)

select * from @linked_server1.@DB_onserver1.dbo.table1

多くのselectステートメントを含むスクリプト全体で機能するのですか?

4

3 に答える 3

0

まさにあなたが望むものではありませんが、1つのアプローチは、(テストされていない)の行に沿って動的SQLを使用して、リモートサーバーからテーブルのビューをスクリプト化することです

declare @table_that_changes varchar(100) 
declare @linked_server1 varchar(20)
declare @linked_server2 varchar(20)
declare @DB_onserver1 varchar(100) 
declare @DB_onserver2 varchar(100)
select @linked_server1 = '[server109]',
       @linked_server2 = '[server104]',
       @DB_onserver1 = '[database203434]',
       @DB_onserver2= '[database416541]',
       @table_that_changes = 'LossTable_2191'

declare @sql varchar(1000)

set @sql = 'create view linked1.table1 as select * from ' +
           @linked_server2 + '.' + @DB_onserver1  + '.table1'

exec( @sql)
于 2013-05-15T06:43:39.360 に答える
-1

スクリプトに GO がない限り、変数はスクリプト全体でスコープ内にある必要があります。私の推測では、ステートメントを再開し、割り当てられた変数をクリアする 1 つ以上の GO があると思います。

于 2013-05-14T19:41:16.973 に答える