Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Аналитическая платформа (PDW)
SQL база данных в Microsoft Fabric
Служебная программа sqlcmd позволяет вводить Transact-SQL инструкции, системные процедуры и файлы скриптов.
Note
Чтобы узнать, какой вариант и версия 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
Note
Чтобы просмотреть переменные среды в 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).
В переменных скрипта регистр игнорируется.
Note
Если переменной среды sqlcmd не присвоено никакое значение, то она удаляется. Использование
:setvar VarNameбез значения очищает переменную.
Присваивая значения переменным скрипта, необходимо придерживаться следующих правил.
- Значения переменных, определенные с помощью параметров
setvarили-v, должны быть заключены в кавычки, если строковое значение содержит пробелы. - Если кавычки — часть значения переменной, то их необходимо экранировать. Например:
:setvar MyVar "spac""e".
Рекомендации по значениями и именами для переменных в cmd.exe SET
Переменные, определенные с использованием SET, являются частью среды cmd.exe и могут быть использованы sqlcmd. Ознакомьтесь со следующими рекомендациями:
- Имена переменных не должны содержать символов пробела и кавычек.
- Значения переменных могут содержать пробелы или кавычки.
Переменные скриптов sqlcmd
| Variable | Связанный параметр | R/W | Default |
|---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R
2 |
"ComputerName" |
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 команды, и последующие команды используют новое значение.
Examples
Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.
A. Использование команды 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
B. Интерактивное использование команды setvar
В следующем примере показана интерактивная установка переменной сценария с помощью команды setvar .
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Вот результаты.
Changed database context to 'AdventureWorks2022'
1>
C. Использование переменных среды командной строки в 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
D. Использование переменных среды на уровне пользователя в 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)
E. Использование скрипта запуска
Сценарий запуска 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)
Note
Параметр -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