2016-11-09 7 views
0

У меня есть большой файл сценария, и мне нужно использовать его на другом сервере. Мне нужно изменить имя сервера один раз в начале с помощью Declare, чтобы я мог использовать один и тот же скрипт на нескольких серверах только путем изменения значения переменной.Объявить имя сервера как переменную в MS Sql Server 2016

что-то подобное:

Declare @Quell nvarchar(100) 
SET @Quell = '[server1].[dbo]' 

SELECT * From @Quell.[Documents] 

, но это не сработало.

как это сделать? спасибо

+2

Вы можете сделать это только с динамическим SQL – HoneyBadger

+0

Вы не можете параметризовать identifires в SQL. Вы можете использовать динамический sql или редактировать файл с помощью текстового редактора, который имеет функцию поиска и замены, чтобы вы могли каждый раз изменять каждое имя сервера. –

+1

Вот ссылка на [Microsoft динамические документы SQL] (https://msdn.microsoft.com/en-us/library/ms709342%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396). Альтернативный подход заключается в использовании [SSIS] (https://msdn.microsoft.com/en-us/library/ms141026.aspx) для циклизации по вашим серверам, выполняя каждый раз сценарий. –

ответ

2

К сожалению, макроподстановка на SQL Server не разрешена, но вы можете использовать динамический SQL.

Declare @Quell nvarchar(100) 
SET @Quell = '[server1].[dbo]' 

Declare @SQL varchar(max) 
SET @SQL = 'SELECT * From ' + @Quell +'.[Documents]' 
Exec(@SQL) 
1

Если вы работаете скрипт с SQL Server Management Studio, вы можете использовать переменную SQLCMD и запустить скрипт в режиме SQLCMD (Query -> SQLCMD Mode). Сценарий SQLCMD также можно выполнить с помощью утилиты командной строки SQLCMD с переменными значениями, переданными в качестве аргументов командной строки.

Пример сценария:

:SETVAR Quell "[server1].[dbo]" 

SELECT * From $(Quell).[Documents]; 

 Смежные вопросы

  • Нет связанных вопросов^_^