Встановлення змінних в режимі SQLCMD


13

Використання SQL Server 2008 R2 Enterprise Edition

Розглянемо наступне твердження:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

Чи можливо в режимі SQLCMD отримати це значення за допомогою TSQL

Щось на зразок: :setvar source_server_name = SELECT @@servername

Дякую

Оновлення 15.07.2013

Два запропоновані нижче відповіді не дуже дали бажаний результат, тому я додаю більш релевантний іспит.

: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 буде встановлена ​​на сервер для 1.


Не те, що я знаю, чи можу зрозуміти.

1
Те, про що ви запитуєте, неможливе самостійно, оскільки змінні sqlcmd оцінюються клієнтом до того, як sql коли-небудь буде надісланий на сервер. Отже, ви просите сервер sql встановити значення змінної, яку він ніколи не бачить. Запустіть трафік sql-профілера на скрипті sql зі змінними sqlcmd, і ви побачите, що вони вже були оцінені.
Тім Абелл

Відповіді:


9

Я думаю, що вам потрібно вивести свої результати у файл і повернути їх. Щось подібне повинно допомогти вам наблизитися до того, що ви шукаєте:

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

Ви можете побачити більше прикладів тут .


Дякую. Я вже пішов з роботи, тому я спробую вашу пропозицію в понеділок
Крейг Ефрейн

Я оновив своє запитання
Craig Efrein

Ця відповідь виявилася найкориснішою.
Крейг Ефрейн

1
Я думаю, важливою частиною тут є те, що ви повинні мати окремі партії, щоб 1) створити файл SETVAR, 2) виконати його для ініціалізації змінної скрипту, і, нарешті, 3) використання змінної скрипту.
Андрій М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.