Mengatur variabel dalam mode SQLCMD

13

Menggunakan SQL Server 2008 R2 Enterprise Edition

Pertimbangkan pernyataan berikut:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

Apakah mungkin dalam mode SQLCMD untuk mendapatkan nilai itu menggunakan TSQL

Sesuatu seperti: :setvar source_server_name = SELECT @@servername

Terima kasih

Pembaruan 7/15/2013

Dua jawaban yang ditawarkan di bawah ini tidak cukup memberikan hasil yang diinginkan, jadi saya menambahkan contoh yang lebih relevan.

:setvar source_server_name [myserver]

Source_server_name variabel diatur ke string teks [myserver_1]

Saya ingin dapat melakukan ini:

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 variabel akan diatur ke nilai di server untuk id 1.

Craig Efrein
sumber
Bukan berarti saya sadar, atau tidak tahu.
1
Apa yang Anda minta tidak mungkin per-se, karena variabel sqlcmd dievaluasi oleh klien sebelum sql dikirim ke server. Jadi, Anda meminta server sql untuk menetapkan nilai variabel yang tidak pernah dilihatnya. Jalankan penelusuran profil sql pada skrip sql dengan variabel sqlcmd dan Anda akan melihat semuanya telah dievaluasi.
Tim Abell

Jawaban:

9

Saya pikir Anda perlu menampilkan hasil Anda ke file dan membawanya kembali. Sesuatu seperti ini akan membantu Anda mendekati apa yang Anda cari:

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

Anda dapat melihat lebih banyak contoh di sini .

SQLRockstar
sumber
Terima kasih. Saya sudah meninggalkan pekerjaan jadi saya akan mencoba saran Anda pada hari Senin
Craig Efrein
Saya telah memperbarui pertanyaan saya
Craig Efrein
Jawaban ini terbukti paling bermanfaat.
Craig Efrein
1
Saya kira bagian penting di sini adalah bahwa Anda harus memiliki batch terpisah untuk 1) menghasilkan file SETVAR, 2) jalankan untuk menginisialisasi variabel skrip, dan, akhirnya, 3) menggunakan variabel skrip.
Andriy M