0

2つの異なるサーバーで2つの同一のログインを作成する自動sqlcmdスクリプトを作成しようとしています。したがって、関連する手順は次のとおりです。

:connect primaryDb 

create login myuser with password='mypassword'
Go

:setvar SID sid from syslogins where name = 'myuser'

:connect secondaryDb

 create login myuser with password='mypassword', sid=$(SID)
 Go

残念ながら、スクリプトは次のステップで失敗します:setvar SID sid from syslogins where name='myuser'。setvarがSQLステートメントの結果を受け入れることができるようにするための有効な構文が見つからないようです。

このための構文はありますか?または、リンクサーバーの使用を伴わない回避策ですか?

乾杯、マット

4

1 に答える 1

1

MSDNは、そのようなことを行う方法の例を示していません。そこで読んだことから、クエリで取得したデータを使用してスクリプト変数を初期化する標準的な方法はないと思います。

テキストファイルへの出力と、場合によっては途中でバッチスクリプトを使用して、これを回避しようとする場合があります。

考え方は基本的にこんな感じです。クエリを2つの部分に分割します。最初の部分はSIDを取得し、それをテキストファイルに書き込みます(:OUTスクリプトコマンドを使用)。次に、2番目の部分の外側で(もちろん実行する前に)スクリプト変数を初期化し、2番目の部分を実行すると、うまくいけばそこにあります。

于 2011-02-03T09:24:16.510 に答える