Ustawianie zmiennych w trybie SQLCMD

13

Korzystanie z SQL Server 2008 R2 Enterprise Edition

Rozważ następujące oświadczenie:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

Czy w trybie SQLCMD można uzyskać tę wartość za pomocą TSQL

Coś jak: :setvar source_server_name = SELECT @@servername

Dziękuję Ci

Aktualizacja 15.07.2013

Dwie przedstawione poniżej odpowiedzi nie dały pożądanego rezultatu, więc dodaję bardziej odpowiedni przykład.

:setvar source_server_name [myserver]

Zmienna nazwa_serwera_źródłowego jest ustawiona na ciąg tekstowy [myserver_1]

Chciałbym móc to zrobić:

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

Zmienna nazwa_serwera_źródłowego byłaby ustawiona na wartość dla serwera dla id 1.

Craig Efrein
źródło
Nie, że jestem świadomy lub mógłbym to rozgryźć.
1
To, o co prosisz, nie jest samo w sobie możliwe, ponieważ zmienne sqlcmd są oceniane przez klienta przed wysłaniem sql na serwer. Pytasz więc, aby serwer SQL ustawił wartość zmiennej, której nigdy nie widzi. Uruchom śledzenie sql profilera na skrypcie sql ze zmiennymi sqlcmd, a zobaczysz, że wszystkie zostały już ocenione.
Tim Abell,

Odpowiedzi:

9

Myślę, że musisz zapisać wyniki w pliku i wprowadzić je z powrotem. Coś takiego powinno pomóc ci zbliżyć się do tego, czego szukasz:

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

Możesz zobaczyć więcej przykładów tutaj .

SQLRockstar
źródło
Dziękuję Ci. Już wyszedłem z pracy, więc wypróbuję twoją sugestię w poniedziałek
Craig Efrein
Zaktualizowałem moje pytanie
Craig Efrein
Ta odpowiedź okazała się najbardziej przydatna.
Craig Efrein
1
Myślę, że ważną częścią tutaj jest to, że musisz mieć oddzielne partie, aby 1) wygenerować plik SETVAR, 2) wykonać go, aby zainicjować zmienną skryptu, i wreszcie 3) użyć zmiennej skryptu.
Andriy M,