Установка переменных в режиме 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 profiler для сценария 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)

Вы можете увидеть больше примеров здесь .


Спасибо. Я уже ушел с работы, поэтому я
опробую

Я обновил свой вопрос
Крейг Эфрейн

Этот ответ оказался самым полезным.
Крейг Эфрейн

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