SQLCMDモードでの変数の設定


13

SQL Server 2008 R2 Enterprise Editionの使用

次の文を考慮してください。

:setvar source_server_name "SERVERNAME\INSTANCENAME"

SQLCMDモードでTSQLを使用してその値を取得することは可能ですか

何かのようなもの: :setvar source_server_name = SELECT @@servername

ありがとうございました

アップデート7/15/2013

以下に示す2つの回答では、望ましい結果が得られなかったため、より関連性の高い試験を追加します。

:setvar source_server_name [myserver]

変数source_server_nameはテキスト文字列[myserver_1]に設定されます

これをできるようにしたい:

create table #tmp(
id int identity(1,1),
server sysname
)

insert into #tmp values('myserver_1'),('myserver_2');

:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1

select '$(source_server_name)' 

(No column name)
myserver_1

変数source_server_nameは、id 1のサーバーの値に設定されます。


私が知っている、または理解できるというわけではありません。

1
sqlcmd変数は、sqlがサーバーに送信される前にクライアントによって評価されるため、要求すること自体は不可能です。したがって、SQLサーバーに、決して見えない変数の値を設定するように要求しています。sqlcmd変数を使用してsqlスクリプトでsqlプロファイラートレースを実行すると、すべての変数が既に評価されていることがわかります。
ティムアベル

回答:


9

結果をファイルに出力して戻す必要があると思います。次のようなものは、探しているものに近づけるのに役立つはずです。

:setvar MyDir "C:\scripts"
:OUT $(MyDir)\test.txt
PRINT ':SETVAR ServerName ''' + @@SERVERNAME + ''''
GO
:OUT stdout
:r $(MyDir)\test.txt
GO
SELECT $(ServerName)

ここで他の例見ることができます


ありがとうございました。私はすでに仕事を辞めているので、月曜日にあなたの提案を試してみます
クレイグ・エフライン

質問を更新しました
クレイグエフライン

この回答が最も有用であることが判明しました。
クレイグエフライン

1
ここで重要な部分は、1)SETVARファイルを生成し、2)スクリプト変数を初期化するためにそれを実行し、最後に3)スクリプト変数を使用するために、別々のバッチが必要だと思います。
アンドリーM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.