Проблема:
При работе с SQL Server может быть затратно по времени и подвержено ошибкам вручную изменять ссылки на сервер и имена рабочих станций в скрипте. Есть ли способ автоматизировать этот процесс?
Решение:
Один из способов решить эту проблему – использовать переменные в sqlcmd. Sqlcmd позволяет использовать как внутренние, так и определенные пользователем переменные, обеспечивая гибкость и переносимость ваших скриптов.
Переменные в sqlcmd могут быть определены и присвоены значения двумя способами:
- Неявно, с использованием переключателя -v sqlcmd
- Явно, с использованием команды :setvar sqlcmd
При неявном определении переменной вы должны использовать переключатель -v, за которым следует имя переменной, знак равенства и желаемое значение. Например:
sqlcmd -v UserTable=AdventureWorks2012.Person.PersonС другой стороны, при использовании команды :setvar для явного присвоения значения переменной, не следует использовать знак равенства. Например:
:setvar UserTable AdventureWorks2012.Sales.vIndividualCustomerЗатем переменные могут быть использованы в ваших скриптах с использованием обозначения $(VARIABLE).
Важно отметить, что имена переменных в sqlcmd не должны содержать пробелов или кавычек, и они не должны иметь ту же форму, что и выражение переменной: $(variable). Имена регистронезависимы.
При установке значения переменной, содержащей пробелы, вы должны заключить его в кавычки. Если само значение содержит кавычки, вы должны экранировать эти символы. Например:
:setvar MyVar "this is my variable"
SELECT '$(MyVar)'
GO
:setvar MyVar "this is ""my"" variable"
SELECT '$(MyVar)'
GOЧтобы удалить переменную, просто установите ее в пустое значение:
:setvar UserTableSqlcmd также позволяет использовать переменные окружения операционной системы как на уровне пользователя, так и на уровне системы. Однако важно отметить, что вы не можете изменять содержимое этих переменных в sqlcmd; они доступны только для чтения.
Приоритет переменных – это важное понятие, которое следует понимать в sqlcmd. Порядок приоритета переменных следующий:
- :Setvar X Y, переменные, определенные внутри скрипта или консоли скриптов
- sqlcmd -v X=Y, переменные, определенные при вызове командной строки
- Командная оболочка (SET X=Y), установленная в командной строке перед запуском sqlcmd
- Переменные окружения на уровне пользователя
- Переменные окружения на уровне системы
Понимая приоритет переменных, вы можете гарантировать, что ваши скрипты используют правильные значения.
Использование переменных в sqlcmd может значительно улучшить переносимость и гибкость ваших скриптов. Определяя и присваивая значения переменным, вы можете легко изменять поведение скрипта без необходимости вручную изменять код.