Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Аналитика Azure Synapse
Аналитическая платформа System (PDW)
База данных SQL в Microsoft Fabric
Служебная программа sqlcmd позволяет вводить Transact-SQL инструкции, системные процедуры и файлы скриптов.
Примечание.
Чтобы узнать, какой вариант и версия sqlcmd установлены в системе, см. статью "Проверка установленной версии служебной программы sqlcmd". Сведения о том, как получить sqlcmd, см. в разделе "Скачать и установить служебную программу sqlcmd".
Переменные скрипта в sqlcmd
Переменные, которые используются в скриптах, называются переменными скрипта. Переменные скрипта позволяют использовать один скрипт в различных сценариях. Например, если нужно выполнить один скрипт на нескольких серверах, вместо изменения скрипта для каждого сервера можно указать для имени сервера соответствующую переменную скрипта. Изменяя имя сервера, указываемое в переменной скрипта, можно выполнять один и тот же скрипт на разных серверах.
Переменные скрипта можно определить явным образом с помощью setvar
команды или неявно с помощью sqlcmd -v
параметра.
В этой статье также содержатся примеры, определяющие переменные среды в командной строке с помощью SET
.
Задание переменных скриптов с помощью команды setvar
Команда setvar
определяет переменные скрипта. Переменные, определенные с помощью setvar
команды, хранятся внутри. Переменные скриптов не следует путать с переменными среды, определенными в командной строке с помощью SET
. Если скрипт ссылается на переменную, которая не является переменной среды или не определена с помощью, setvar
возвращается сообщение об ошибке, а выполнение скрипта останавливается. Для получения дополнительной информации см. параметр -b
в команде sqlcmd.
Приоритет переменной (низкий и высокий)
Если несколько переменных имеют одинаковое имя, то используется переменная с более высоким приоритетом.
- Системные переменные среды.
- Переменные среды уровня пользователя.
- Командная оболочка (
SET X=Y
) устанавливается в командной строке перед запуском sqlcmd sqlcmd -v X=Y
:Setvar X Y
Примечание.
Чтобы просмотреть переменные среды в Windows 11, откройте вкладку "Параметры", а затем перейдите в раздел "Сведения осистеме>" и выберите ссылку "Дополнительные параметры системы". В окне "Свойства системы" выберите "Переменные среды". В Linux введите printenv
в командной строке и в macOS введите env
.
Неявно задать переменные скриптов
При запуске программы sqlcmd с параметром, с которым связана переменная sqlcmd , переменной sqlcmd неявно присваивается значение, заданное для этого параметра. В следующем примере программа sqlcmd
запускается с параметром -l
. Это неявно задает SQLLOGINTIMEOUT
переменную.
sqlcmd -l 60
Можно также использовать -v
параметр, чтобы задать переменную скрипта, которая существует в скрипте. В следующем скрипте (имя файла testscript.sql
) ColumnName
является переменной скрипта.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Кроме того, с помощью параметра -v
можно указать имя возвращаемого столбца:
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Чтобы возвратить другой столбец с помощью того же скрипта, измените значение переменной скрипта ColumnName
.
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Руководство по написанию скриптов для имен и значений переменных
Присваивая имена переменным скрипта, необходимо придерживаться следующих правил.
Имена переменных не должны содержать символов пробела и кавычек.
Имена переменных не должны иметь такую же форму, как у выражений переменных $(var).
В переменных скрипта регистр игнорируется.
Примечание.
Если переменной среды sqlcmd не присвоено никакое значение, то она удаляется. Использование
:setvar VarName
без значения очищает переменную.
Присваивая значения переменным скрипта, необходимо придерживаться следующих правил.
- Значения переменных, определенные с помощью параметров
setvar
или-v
, должны быть заключены в кавычки, если строковое значение содержит пробелы. - Если кавычки — часть значения переменной, то их необходимо экранировать. Например,
setvar MyVar "spac""e"
.
Рекомендации по значениями и именами для переменных в cmd.exe SET
Переменные, определенные с использованием SET
, являются частью среды cmd.exe и могут быть использованы sqlcmd. Ознакомьтесь со следующими рекомендациями:
- Имена переменных не должны содержать символов пробела и кавычек.
- Значения переменных могут содержать пробелы или кавычки.
Переменные скриптов sqlcmd
Переменная | Связанный параметр | R/W | По умолчанию. |
---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
ЛокальныйИнстансПоУмолчанию |
SQLCMDWORKSTATION |
-H |
R
2 |
Имя компьютера |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
"8" (секунд) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = неограниченное время ожидания |
SQLCMDHEADERS |
-h |
R/W
3 |
0 |
SQLCMDCOLSEP |
-s |
R/W
3 |
" " |
SQLCMDCOLWIDTH |
-w |
R/W
3 |
0 |
SQLCMDPACKETSIZE |
-a |
R
2 |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W
3 |
0 |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W
3 |
«256» |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W
3 |
"0" = неограниченное время ожидания |
SQLCMDEDITOR |
R/W
3 |
edit.com | |
SQLCMDINI |
R
2 |
"" |
1 SQLCMDUSER, SQLCMDPASSWORD и SQLCMDSERVER устанавливаются при использовании :Connect
.
2 R указывает, что значение может быть задано только один раз во время инициализации программы.
3 R/W указывает, что значение можно сбросить с помощью setvar
команды, и последующие команды используют новое значение.
Примеры
Примеры кода в этой статье используют базу данных образца AdventureWorks2022
или AdventureWorksDW2022
, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.
А. Использование команды setvar в скрипте
Команда setvar позволяет управлять многими параметрами программы sqlcmd в сценарии. В следующем примере создается скрипт test.sql
, в котором переменной SQLCMDLOGINTIMEOUT
присваивается значение 60
, а другой переменной скрипта, server
, присваивается значение testserver
. Следующий код представлен в test.sql
.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
Затем скрипт вызывается с помощью sqlcmd:
sqlcmd -i c:\test.sql
Б. Интерактивное использование команды setvar
В следующем примере показана интерактивная установка переменной сценария с помощью команды setvar
.
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Вот результаты.
Changed database context to 'AdventureWorks2022'
1>
В. Использование переменных среды командной строки в sqlcmd
В следующем примере четыре переменные окружения are
установлены, а затем вызываются из sqlcmd.
SET tablename=Person.Person
SET col1=FirstName
SET col2=LastName
SET title=Ms.
sqlcmd -d AdventureWorks2022
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
Д. Использование переменных среды на уровне пользователя в sqlcmd
В следующем примере переменная %Temp%
среды на уровне пользователя устанавливается в командной sqlcmd
строке и передается во входной файл. Чтобы просмотреть пользовательские переменные среды, на панели управлениядважды щелкните компонент Система. Выберите вкладку Дополнительно и затем выберите Переменные среды.
Следующий программный код является частью входного файла C:\testscript.txt
:
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
Следующий программный код вводится в командной строке:
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
Следующий результат отправляется в выходной файл C:\Documents and Settings\<user>\Local Settings\Temp\output.txt
.
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
Е. Использование скрипта запуска
Сценарий запуска sqlcmd выполняется при запуске программы sqlcmd . В следующем примере задается переменная среды SQLCMDINI
. Ниже приведено содержимое сценария init.sql.
SET NOCOUNT ON
GO
DECLARE @nt_username nvarchar(128)
SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))
FROM sys.dm_exec_sessions WHERE spid = @@SPID)
SELECT @nt_username + ' is connected to ' +
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +
' (' +`
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +
')'
:setvar SQLCMDMAXFIXEDTYPEWIDTH 100
SET NOCOUNT OFF
GO
:setvar SQLCMDMAXFIXEDTYPEWIDTH
Таким образом файл init.sql
вызывается при запуске sqlcmd
.
SET sqlcmdini=c:\init.sql
sqlcmd
Это вывод.
1> <user> is connected to <server> (9.00.2047.00)
Примечание.
Параметр -X
отключает функцию скрипта запуска.
F. Расширение переменной
В следующем примере показана работа с данными в форме переменной sqlcmd .
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Вставьте одну строку в Col1
из dbo.VariableTest
, содержащую значение $(tablename)
.
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
При запросе -b
установлен, sqlcmd завершит работу после появления ошибки "Переменная не определена".
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Вот результаты.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
При условии, что переменная MyVar
равна $(tablename)
.
6> :setvar MyVar $(tablename)
Эти инструкции возвращают строку и сообщение «Переменная сценария "tablename" не определена».
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Эти выражения возвращают строку таблицы.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Связанный контент
- Дополнительные сведения о служебной программе sqlcmd (Go) на GitHub
- Краткое руководство. Запуск образов контейнеров SQL Server Linux с помощью Docker
- Запустите служебную программу sqlcmd
- Выполнение T-SQL из файла скрипта с помощью sqlcmd
- использование служебной программы
- Использование sqlcmd с переменными скриптов
- Подключение к SQL Server с помощью sqlcmd
- Изменение скриптов SQLCMD при помощи редактора запросов
- Управление этапами задания
- Создайте шаг задания CmdExec