Как запустить командную строку из скрипта sql
Всем привет!
Такой вопрос:
У меня есть MS SQL Server 2000. Как мне запустить sql-скрипт, развертывающий базу данных, из коммандной строки.
Re: MS SQL Server — Как из командной строки запустить sql-ск
| От: | ksg71 | |
| Дата: | 26.08.05 11:05 | |
| Оценка: | +1 | |
Здравствуйте, Mechanic55, Вы писали:
M>Всем привет!
M>Такой вопрос:
M>У меня есть MS SQL Server 2000. Как мне запустить sql-скрипт, развертывающий базу данных, из коммандной строки.
смотри утилиту osql.exe
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re: MS SQL Server — Как из командной строки запустить sql-ск
| От: | Hobot Bobot |
| Дата: | 26.08.05 11:06 |
| Оценка: |
Здравствуйте, Mechanic55, Вы писали:
M>Всем привет!
M>Такой вопрос:
M>У меня есть MS SQL Server 2000. Как мне запустить sql-скрипт, развертывающий базу данных, из коммандной строки.
Смотри утилиту isql.exe в каталоге Tools\Binn SQL Server’а
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re[2]: MS SQL Server — Как из командной строки запустить sql
| От: | Mechanic55 |
| Дата: | 26.08.05 12:04 |
| Оценка: |
HB>Смотри утилиту isql.exe в каталоге Tools\Binn SQL Server’а
про утилиты я знаю. я формат строки не знаю. у меня есть скрипт и его из инсталятора надо бы развернуть
Re[3]: MS SQL Server — Как из командной строки запустить sql
| От: | Hobot Bobot |
| Дата: | 26.08.05 13:34 |
| Оценка: |
Здравствуйте, Mechanic55, Вы писали:
HB>>Смотри утилиту isql.exe в каталоге Tools\Binn SQL Server’а
M>про утилиты я знаю. я формат строки не знаю. у меня есть скрипт и его из инсталятора надо бы развернуть
osql.exe -? — список ключей
osql.exe -U -P -i — выполнить файл используя указанный login/password
Кстати, лучше все-таки использовать osql.exe
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re[3]: MS SQL Server — Как из командной строки запустить sql
| От: | wildwind |
| Дата: | 26.08.05 14:52 |
| Оценка: |
Здравствуйте, Mechanic55, Вы писали:
M>про утилиты я знаю. я формат строки не знаю. у меня есть скрипт и его из инсталятора надо бы развернуть
Записная книжка ежа
SQL*Plus — программа для работы с СУБД Oracle посредством командной строки. Используя SQL*Plus можно выполнять команды SQL и PL/SQL в интерактивном режиме или используя сценарий.
Основное преимущество SLQ*Plus — доступность, т.к. инструмент доступен практически всегда, когда в системе установлен Oracle. При этом это достаточно мощный инструмент, используя который можно решать различные задачи на удаленных машинах.
К написанию этой статьи меня подтолкнула книга «Oracle SQL*Plus: The Definitive Guide, 2nd Edition», написанная Jonathan Gennick. Как обычно, появилось желание систематизировать информацию и представить ее в удобном виде.
При этом сразу считаю нужным оговориться, что я использую SQLplus для написания и выполнения скриптов на удаленных машинах, в этой статье описываю именно используемые для этого команды.
Область возможного использования SQLplus при этом гораздо шире, например — построение отчетов, в том числе в формате HTML.
Параметры, подключение к базе, запуск скриптов
sqlplus /nolog - запуск без интерактивного запроса логина/пароля для входа -S - молчаливый режим -L - только одна попытка входа в интерактиве -V - показать версию SQLplus -H - отобразить справку CONNECT gennick@db01 - присоединиться к базе, запросит пароль в интерактиве HOST - переключиться на командную строку операционной системы, не разрывая соединения с базой (exit - вернет в SQLplus) sqlplus user/pass@db @script.sql - присоединиться к базе и выполнить скрипт sqlplus user/pass@db @script.sql arg "arg" - выполнить скрипт с аргументами (будут доступны как &1, &2)
Выполнить несколько строк кода (не передавая отдельный файл со скриптом), unix:
sqlplus -s user/password@db_name
Выполнение SQL запросов
Запрос может состоять из нескольких строк, содержать комментарии, но не может содержать внутри пустые строки.
SQL> SELECT * /* All columns */ 2 FROM project;
Запрос может быть выполнен тремя способами:
- точка с запятой в конце запроса
SQL> INSERT INTO project 2 /* All columns */ 3 (project_id, project_name, project_budget) 4 VALUES (1006,'Mainframe Upgrade',456789) 5 ;
- строка с слешем "/" после запроса
SQL> UPDATE project 2 SET project_budget = 1000000 3 WHERE project_id = 1006 4 /
- пустая строка после запроса (будет помещен в буфер, но не выполнен немедленно)
SQL> DELETE 2 FROM project 3 WHERE project_id = 1006 4 SQL> SQL> / 1 row deleted.
Выполнение PL/SQL блоков
Пример PL/SQL блока:
SQL> DECLARE 2 X VARCHAR2(12) := 'Hello World!'; 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE(X); 5 EXCEPTION 6 WHEN OTHERS THEN 7 DBMS_OUTPUT.PUT_LINE('An error occurred.'); 8 END; 9 / PL/SQL procedure successfully completed.
Правила выполнения PL/SQL блоков:
- Первое слово в PL/SQL блоке должно быть из списка: BEGIN, DECLARE, CREATE PROCEDURE,
CREATE FUNCTION, CREATE TRIGGER, CREATE PACKAGE, CREATE TYPE, CREATE TYPE BODY. Регистр не важен. - Блок может состоять из нескольких строк
- Можно вставлять /* комментарии */, они также могут быть на несколько строк
- Пустые строки не разрешены внутри блока
Сигнал к выполнению блока может быть подан двумя путями:
- Строка, содержащая только слеш "/" после блока - выполнить сразу
SQL> BEGIN 2 NULL; 3 END; 4 /
- Строка, содержащая точку "." после блока - поместить в буфер. Содержимое буфера может быть выведено командой LIST и выполнено, путем указания одиночного слеша "/" или команды RUN.
SQL> BEGIN 2 NULL; 3 END; 4 .
Одиночное выражение PL/SQL может быть выполнено, используя:
EXECUTE plsql_statement
SQL> EXECUTE DBMS_OUTPUT.ENABLE(10000) PL/SQL procedure successfully completed.
В случае ошибок, при выполнении процедуры, можно отобразить их выполнив команду:
SHOW ERRORS
Работа с переменными
Переменные могут быть заданы двумя способами:
&variable - переменная в скрипте, будет запрошена каждый раз когда встретится в ходе выполнения &&variable - переменная в скрипте, будет запрошена один раз и сохранена на всю сессию работы с SQLplus
Если уже была определена &&variable, то значение будет подставлено во все дальнейшие переменные как &variable так и &&variable.
Если была определена &&variable, и скрипт запущен повтороно в ходе той же сессии работы с SQLplus - будет использовано старое значение переменной. Чтобы этого избежать - можно запрашивать интерактивный ввод в скрипте принудительно, испольтзуя команду:
ACCEPT table_name CHAR PROMPT 'Enter the table name >'
ACCEPT можно использовать для валидации:
SQL> ACCEPT my_variable NUMBER FORMAT 999 PROMPT 'Enter a number >' Enter a number >1234 "1234" does not match input format "999" Enter a number >123 SQL>
Для ввода дат в определенном формате:
ACCEPT my_variable DATE FORMAT 'MM/DD/YY' PROMPT 'Give me a date >'
SQL*Plus поддерживает четыре типа переменных: CHAR, NUMBER, BINARY_FLOAT, and BINARY_DOUBLE. При вводе с клавиатуры переменная будет типа CHAR.
Несмотря на это, можно использовать NEW_VALUE, чтобы задать числовую переменную, полученную как результат запроса.
SQL> COLUMN x NEW_VALUE m y_age SQL> SELECT 42 x FROM dual; X ---------- 42 SQL> DEFINE my_age DEFINE MY_AGE = 42 (NUMBER)
Bind-переменные могут использоваться для передачи данных между PL/SQL и SQL блоками:
-- Bind-переменные могут быть определены в скрипте VARIABLE s_table_name varchar2(30) -- Можно ссылаться на bind-переменные в PL/SQL block. BEGIN :s_table_name := 'EMPLOYEE'; END; / -- Bind-переменные могут быть использованы и в SQL запросах. SELECT index_name FROM user_indexes WHERE table_name = :s_table_name; -- Bind-переменные хранятся до выхода из SQL*Plus и могут быть использованы в нескольких PL/SQL блоках. SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.PUT_LINE(:s_table_name); END; /
Присвоить bind-переменной значение &-переменной:
DEFINE my_sub_num = 9 VARIABLE my_bind_num NUMBER EXECUTE :my_bind_num := &my_sub_num;
Вывести значение bind-переменной:
SQL> VAR my_bind_var VARCHAR2(35) SQL> EXECUTE :my_bind_var := 'Brighten the corner where you are'; PL/SQL procedure successfully completed. SQL> PRINT my_bind_var MY_BIND_VAR ----------------------------------------------------------------- Brighten the corner where you are
Присвоить &-переменной значение bind-переменной:
SQL> DEFINE my_sub_var = ' ' SQL> VAR my_bind_var VARCHAR2(35) SQL> EXECUTE :my_bind_var := 'Brighten the corner where you are'; PL/SQL procedure successfully completed. SQL> COLUMN my_bind_var NEW_VALUE my_sub_var SQL> PRINT my_bind_var MY_BIND_VAR ---------------------------------------------------------------------- Brighten the corner where you are SQL> PROMPT &my_sub_var Brighten the corner where you are
Получаем OUT-параметр процедуры в bind-переменную:
ACCEPT not_can CHAR PROMPT 'Enter a table reference >' VARIABLE can VARCHAR2(60) EXECUTE DBMS_UTILITY.CANONICALIZE('¬_can',:can, 60); COLUMN can HEADING 'Canonicalized Reference IS:' PRINT can
Условное выполнение в SQLplus:
ACCEPT s_delete_confirm PROMPT 'Delete project hours data (Y/N)?' DELETE FROM project_hours WHERE UPPER('&&s_delete_confirm') = 'Y';
Пример скрипта, принимающего несколько переменных на вход в формате c возможностью задать дефолтные значения:
sqlplus user/pass@db @script.sql "var=foo; othervar=bar;"
prompt Define parameters define script_param = "" column col_script_param new_value script_param noprint select replace(trim('&&1'), ' ') "col_script_param" from dual; undef 1 define parse_name_parameter = "var=" select nvl(max(regexp_replace(csv, '(.*)(&&parse_name_parameter)(.+?)(;|$)(.*)', 'define var="\3";', 1, 1, 'i')), 'define var=default;') r from (select '&&script_param' csv from dual) where instr(upper(csv), upper('&&parse_name_parameter')) != 0; define parse_name_parameter = "othervar=" select nvl(max(regexp_replace(csv, '(.*)(&&parse_name_parameter)(.+?)(;|$)(.*)', 'define othervar="\3";', 1, 1, 'i')), 'define othervar=default_other;') r from (select '&&script_param' csv from dual) where instr(upper(csv), upper('&&parse_name_parameter')) != 0; prompt prompt var: &&var prompt othervar: &&othervar prompt
Настройки выполнения скриптов
Действуют на протяжении сессии в SQLplus.
SET SERVEROUTPUT ON/OFF SIZE 1000000 FORMAT WORD_WRAPPED - отображать вывод dbms_output (размер буфера, байт) (разделение по строкам для длинного вывода) SET TERMOUT ON/OFF - включить/отключить вывод на экран терминала SET ECHO ON/OFF - включить/отключить отображение команд по мере выполнения SET VERIFY ON/OFF - включить/отключить отображение замененных переменных например, так: old 9: AND ui.table_name = UPPER('&table_name') new 9: AND ui.table_name = UPPER('project_hours') SET FEEDBACK ON/OFF - включить/отключить вывод результата выполнения команд например, так: 6 rows selected. Commit complete. SET ESCAPE ON/OFF - включить/отключить поиск символов для экранирования например: SQL> SET ESCAPE ON SQL> DEFINE friends = "Joe \& Matt" SET ESCAPE / - задать другой символ экранирования (по умолчанию \) SET CONCAT ON/OFF - включить/отключить конкатенацию, символ конкатенации по умолчанию - точка "." например: SQL> DEFINE sql_type = "PL/" SQL> PROMPT &sql_type.SQL PL/SQL SET CONCAT ! - задать другой символ для конкатенации SET DEFINE ON/OFF - включить/отключить замену переменных (&var, &&var)
Запомнить настройки перед выполнением скрипта и вернуть обратно по завершении выполнения:
STORE SET original_settings REPLACE . script code here . @original_settings
Другие команды
PROMPT Show this text. - вывод текста на экран REMARK This is a comment. - комментарий в скрипте REM This is a comment too. - краткая форма записи REMARK SPOOL some_file.txt - включить вывод выполнения скрипта файл some_file.txt (будет обнулен) SPOOL some_file.txt APP - включить вывод выполнения скрипта файл some_file.txt (будет дозаписан) SPOOL OFF - отключить вывод в файл WHENEVER SQLERROR EXIT - выйти при ошибке SQL WHENEVER SQLERROR EXIT ROLLBACK - откатить транзакцию и выйти при ошибке SQL WHENEVER SQLERROR EXIT SQL.SQLCODE - выйти и вернуть код ошибки при ошибке SQL WHENEVER OSERROR EXIT - команды аналогичны WHENEVER SQLERROR . - но при ошибке операционной системы
Взаимодействие с unix shell
Обработать результат выполнения SQLplus-скрипта в Unix:
#!/bin/bash if sqlplus -s user/secret @script.sql then echo Success else echo Unable to create raise table. fi
Вернуть код ответа в Unix:
#!/bin/bash sqlplus -s gennick/secret
Вывод из скрипты в переменную командной строки unix:
#!/bin/bash tabcount=`sqlplus -s gennick/secret
sqlcmd — использование служебной программы
Служебная программа sqlcmd — это служебная программа командной строки для нерегламентированного интерактивного выполнения инструкций и сценариев Transact-SQL (T-SQL) и автоматизации задач сценариев T-SQL. Чтобы использовать sqlcmd в интерактивном режиме или создавать файлы скриптов для запуска с помощью sqlcmd, пользователи должны понимать T-SQL. Программа sqlcmd обычно применяется следующим образом.
- Пользователи вводит инструкции T-SQL таким образом, как и в командной строке. Результаты выводятся в окно командной строки. Чтобы открыть окно командной строки, введите cmd в поле поиска Windows и выберите командную строку , чтобы открыть ее. В окне командной строки введите sqlcmd и необходимые параметры. Полный список параметров, поддерживаемых sqlcmd, см. в служебной программе sqlcmd.
- Пользователи передают задание sqlcmd либо путем указания одной инструкции T-SQL для выполнения, либо путем указания служебной программы в текстовый файл, содержащий инструкции T-SQL для выполнения. Выходные данные направляются в текстовый файл, но также могут отображаться в командной строке.
- Режим SQLCMD в редакторе запросов SQL Server Management Studio (SSMS).
- Объекты управления SQL Server (SMO).
- Задания CmdExec агента SQL Server.
Часто используемые параметры sqlcmd
- Параметр сервера ( -S ) определяет экземпляр SQL Server, к которому подключается sqlcmd .
- Параметры проверки подлинности ( -E и -P -U ) указывают учетные данные, которые sqlcmd использует для подключения к экземпляру SQL Server.
Заметка -E Параметр является значением по умолчанию и не требуется указывать.
Подключение к программе sqlcmd
- Подключитесь к экземпляру по умолчанию с помощью проверки подлинности Windows для интерактивного выполнения инструкций T-SQL:
sqlcmd -S
Заметка В предыдущем примере не указано, -E так как это значение по умолчанию и sqlcmd подключается к экземпляру по умолчанию с помощью проверки подлинности Windows.
sqlcmd -S \
sqlcmd -S .\
sqlcmd -S \ -i -o
sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
sqlcmd -U MyLogin -S \
Совет Для просмотра полного перечня параметров, поддерживаемых служебной программой sqlcmd , введите sqlcmd -? .
Интерактивный запуск инструкций Transact-SQL с помощью программы sqlcmd
Программу sqlcmd можно использовать интерактивно для выполнения инструкций T-SQL в окне командной строки. Для интерактивного выполнения инструкций T-SQL с помощью sqlcmd запустите программу без использования -Q , -q -Z или -i параметров, чтобы указать входные файлы или запросы. Например:
sqlcmd -S \
Если команда выполняется без входных файлов или запросов, sqlcmd подключается к указанному экземпляру SQL Server, а затем отображает новую строку с символом подчеркивания, 1> который называется строкой sqlcmd . Указывает 1 , что это первая строка инструкции T-SQL, а запрос sqlcmd — это точка, в которой инструкция T-SQL начинается при вводе в нее.
В командной строке sqlcmd можно вводить инструкции T-SQL и команды sqlcmd, например GO и EXIT . Каждая инструкция T-SQL помещается в буфер, называемый кэшем инструкций. Эти инструкции отправляются в SQL Server после ввода GO команды и нажатия клавиши ВВОД. Чтобы выйти из sqlcmd, введите EXIT или QUIT в начале новой строки.
Чтобы очистить кэш инструкций, введите :RESET . Ввод клавиш CTRL+C приводит к выходу sqlcmd . Ctrl+C также можно использовать для остановки выполнения кэша инструкций после GO выдачи команды.
Инструкции T-SQL, введенные в интерактивном сеансе, можно изменить, введя :ED команду и запрос sqlcmd . Редактор откроется и после редактирования инструкции T-SQL и закрытия редактора в командном окне появится измененная инструкция T-SQL. Введите GO , чтобы запустить измененную инструкцию T-SQL.
Строки в кавычках
Символы, заключенные в кавычки, используются без какой-либо дополнительной предварительной обработки, за исключением кавычек, которые вставляются в строку путем ввода двух последовательных кавычек. SQL Server обрабатывает эту последовательность символов как одну кавычку. (Однако перевод происходит на сервере.) Переменные скрипта не развертываются при их отображении в строке.
sqlcmd PRINT "Length: 5"" 7'"; GO
Length: 5" 7'
Многострочные символьные строки
Программаsqlcmd поддерживает скрипты, в которых одна строка занимает несколько строк. Например, следующая SELECT инструкция охватывает несколько строк, но является одной строкой, выполняемой при нажатии клавиши ВВОД после ввода GO .
SELECT FROM WHERE ; GO
Пример интерактивной команды sqlcmd
Ниже приведен пример интерактивного выполнения программы sqlcmd .
При открытии окна командной строки есть одна строка, аналогичная следующей:
C:\Temp\>
Это означает, что папка C:\Temp\ является текущей папкой, и если указать имя файла, Windows ищет файл в этой папке.
Введите sqlcmd для подключения к экземпляру SQL Server по умолчанию на локальном компьютере, а содержимое окна командной строки выглядит следующим образом:
C:\Temp>sqlcmd 1>
Это означает, что вы подключились к экземпляру SQL Server и sqlcmd теперь готовы принять инструкции T-SQL и команды sqlcmd . Мигающий знак подчеркивания после 1> запроса sqlcmd , который помечает расположение, в котором отображаются операторы и команды, которые вы вводите. Теперь введите USE AdventureWorks2022 и нажмите клавишу ВВОД, а затем введите GO и нажмите клавишу ВВОД. Содержимое окна командной строки выглядит следующим образом:
sqlcmd USE AdventureWorks2022; GO
Changed database context to 'AdventureWorks2022'. 1>
При нажатии клавиши ВВОД он сигнализирует sqlcmd о запуске новой строки. Нажатие клавиши ВВОД после ввода GO сигналов sqlcmd для отправки USE AdventureWorks2022 инструкции в экземпляр SQL Server. Затем sqlcmd возвращает сообщение, указывающее, что USE инструкция успешно завершена, и отображает новую 1> строку в качестве сигнала для ввода новой инструкции или команды.
В следующем примере показано, какое окно командной строки содержит, если ввести SELECT инструкцию, GO выполнить SELECT инструкцию и EXIT выйти из sqlcmd:
USE AdventureWorks2022; GO SELECT TOP (3) BusinessEntityID, FirstName, LastName FROM Person.Person; GO
BusinessEntityID FirstName LastName ----------------- ---------- ------------ 1 Syed Abbas 2 Catherine Abel 3 Kim Abercrombie
После создания выходных данных sqlcmd сбрасывает запрос sqlcmd и отображает. 1> Введите EXIT в запросе 1> , чтобы выйти из сеанса. Теперь можно закрыть окно командной строки. Для этого введите еще одну команду EXIT .
Создание и запрос контейнера SQL Server
Для создания нового экземпляра SQL Server в контейнере можно использовать sqlcmd (Go). sqlcmd (Go) предоставляет create инструкцию, которая позволяет указать образ контейнера и резервное копирование SQL Server, чтобы быстро создать экземпляр SQL Server для разработки, отладки и анализа.
Требуется установленная среда выполнения контейнера, например Docker или Podman.
В следующей команде показано, как просмотреть все доступные параметры для создания нового контейнера SQL Server:
sqlcmd create mssql --help
Следующая команда создает новый экземпляр SQL Server с помощью последней версии SQL Server 2022 (16.x), а затем восстанавливает образец базы данных Wide World Importers:
sqlcmd create mssql --accept-eula --tag 2022-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
После создания экземпляра SQL Server можно использовать sqlcmd (Go) для управления и запроса.
Следующая команда подтверждает версию созданного экземпляра:
sqlcmd query "SELECT @@version"
Следующая команда запускает интерактивный сеанс с созданным экземпляром:
sqlcmd query
Следующая команда открывает Azure Data Studio и автоматически подключается к базе данных, восстановленной во время создания:
sqlcmd open ads
Следующая команда содержит строки подключения, которые будут использоваться для подключения к созданному экземпляру:
sqlcmd config connection-strings
Следующая команда используется для удаления контейнера, если он больше не нужен:
sqlcmd delete
Выполнение файлов скриптов Transact-SQL с помощью sqlcmd
Вы можете использовать программу sqlcmd для выполнения файлов скриптов базы данных. Файлы скриптов — это текстовые файлы, содержащие сочетание инструкций T-SQL, команд sqlcmd и переменных скриптов. Дополнительные сведения об использовании переменных скрипта см. в разделе Использование программы sqlcmd с переменными скрипта. Программаsqlcmd работает с инструкциями, командами и переменными скрипта, помещенными в файл скрипта, подобно тому как она работает с инструкциями и командами, вводимыми в интерактивном режиме. Главное отличие заключается в том, что программа sqlcmd без остановок считывает входной файл, а не ждет, пока пользователь введет инструкции, команды или переменные скрипта.
Существуют различные способы создания файлов скрипта базы данных:
- Вы можете интерактивно создавать и отлаживать набор инструкций T-SQL в SQL Server Management Studio, а затем сохранять содержимое окна запроса в виде файла скрипта.
- Текстовый файл, содержащий инструкции T-SQL, можно создать с помощью текстового редактора, например Блокнота.
Примеры
О. Запуск скрипта с помощью sqlcmd
Запустите Блокнот и введите следующие инструкции T-SQL:
USE AdventureWorks2022; GO SELECT TOP (3) BusinessEntityID, FirstName, LastName FROM Person.Person; GO
Создайте папку с именем MyFolder и сохраните скрипт в виде файла MyScript.sql в папке C:\MyFolder . Введите следующую команду в командной строке, чтобы запустить скрипт и поместить выходные данные в MyOutput.txt MyFolder :
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Changed database context to 'AdventureWorks2022'. BusinessEntityID FirstName LastName ----------------- ---------- ------------ 1 Syed Abbas 2 Catherine Abel 3 Kim Abercrombie (3 rows affected)
B. Использование sqlcmd с выделенным административным подключением
В следующем примере sqlcmd используется для подключения к серверу с блокировкой с помощью выделенного подключения администратора (DAC).
C:\Temp\>sqlcmd -S ServerName -A 1> SELECT session_id, blocking_session_id FROM `sys.dm_exec_requests` WHERE blocking_session_id <> 0; 2> GO
session_id blocking_session_id ----------- --------------------` 62 64 (1 rows affected)
Используйте sqlcmd , чтобы завершить процесс блокировки.
1> KILL 64; 2> GO
C. Использование sqlcmd для выполнения хранимой процедуры
В следующем примере показано, как выполнить хранимую процедуру с помощью sqlcmd. Создайте следующую хранимую процедуру.
USE AdventureWorks2022; GO IF OBJECT_ID('dbo.ContactEmailAddress', 'P') IS NOT NULL DROP PROCEDURE dbo.ContactEmailAddress; GO CREATE PROCEDURE dbo.ContactEmailAddress ( @FirstName NVARCHAR(50), @LastName NVARCHAR(50) ) AS SET NOCOUNT ON; SELECT EmailAddress FROM Person.Person WHERE FirstName = @FirstName AND LastName = @LastName; SET NOCOUNT OFF; GO
В командной строке sqlcmd введите следующее:
C:\Temp\sqlcmd 1> :Setvar FirstName Gustavo 1> :Setvar LastName Achong 1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName) 2> GO EmailAddress ----------------------------- gustavo0@adventure-works.com
D. Использование sqlcmd для обслуживания базы данных
В следующем примере показано, как использовать sqlcmd для задачи обслуживания базы данных. Создайте C:\Temp\BackupTemplate.sql со следующим кодом.
USE master; BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
В командной строке sqlcmd введите следующий код:
C:\Temp\>sqlcmd 1> :connect Sqlcmd: Successfully connected to server . 1> :setvar db msdb 1> :setvar bakfile C:\Temp\msdb.bak 1> :r C:\Temp\BackupTemplate.sql 2> GO Changed database context to 'master'. Processed 688 pages for database 'msdb', file 'MSDBData' on file 2. Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2. BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
Д. Использование sqlcmd для выполнения кода на нескольких экземплярах
Следующий код представляет собой скрипт для соединения двух экземпляров. Обратите внимание на команду GO перед подключением ко второму экземпляру.
:CONNECT \, EXEC dbo.SomeProcedure GO :CONNECT \, EXEC dbo.SomeProcedure GO
Д. Возврат выходных данных XML
Следующий пример показывает, как выходные данные XML возвращаются неформатированными, в виде непрерывного потока.
C:\Temp\>sqlcmd -d AdventureWorks2022 1> :XML ON 1> SELECT TOP 3 FirstName + ' ' + LastName + ', ' 2> FROM Person.Person 3> GO Syed Abbas, Catherine Abel, Kim Abercrombie,
Е. Использование sqlcmd в файле скрипта Windows
Команда sqlcmd, например sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt, , может выполняться в BAT-файле вместе со сценарием VBScript. В этом случае не используйте интерактивные параметры. Программаsqlcmd должна быть установлена на компьютере, на котором выполняется BAT-файл.
Сначала создайте в следующих четырех файлах C:\Temp :
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
SELECT 'batch #1'; GO SELECT 'batch #2'; GO
:exit(select 100)
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
Затем из командной строки запустите C:\Temp\windowsscript.bat :
C:\Temp\>windowsscript.bat Running badscript.sql == An error occurred Running goodscript.sql Running returnvalue.sql SQLCMD returned 100 to the command shell
G. Использование sqlcmd для задания шифрования в базе данных SQL Azure
sqlcmd можно выполнить при подключении к данным базы данных SQL, чтобы указать шифрование и доверие сертификатов. Доступны два варианта sqlcmd :
- Параметр -N используется клиентом для запроса зашифрованного подключения. Этот параметр аналогичен параметру ADO.net ENCRYPT = true .
- Параметр -C используется клиентом для настройки неявного сертификата сервера доверия и не проверяет его. Этот параметр аналогичен параметру ADO.net TRUSTSERVERCERTIFICATE = true .
Служба базы данных SQL не поддерживает все SET параметры, доступные в экземпляре SQL Server. Следующие параметры вызывают ошибку, если соответствующий параметр SET имеет значение ON или OFF :
- SET ANSI_DEFAULTS
- SET ANSI_NULLS
- SET REMOTE_PROC_TRANSACTIONS
- SET ANSI_NULL_DEFAULT
Следующие параметры SET не вызывают исключений, но не могут использоваться. Они устарели:
- SET CONCAT_NULL_YIELDS_NULL
- SET ANSI_PADDING
- SET QUERY_GOVERNOR_COST_LIMIT
Синтаксис
В следующих примерах приведены случаи, когда параметры поставщика собственных клиентов SQL Server включают:
- ForceProtocolEncryption = False
- Trust Server Certificate = No
Подключение с использованием учетных данных Windows и шифрование соединения:
sqlcmd -E -N
Подключение с использованием учетных данных Windows и доверие сертификату сервера:
sqlcmd -E -C
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -N -C
В следующих примерах приведены случаи, когда параметры поставщика собственных клиентов SQL Server включают:
- ForceProtocolEncryption = True
- TrustServerCertificate = Yes
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -N
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -C
Подключение с использованием учетных данных Windows, шифрование соединения и доверие сертификату сервера:
sqlcmd -E -N -C
Если поставщик указывает ForceProtocolEncryption = True , то шифрование включено, даже если Encrypt=No в строке подключения.
Далее
- Служебная программа sqlcmd
- Использование программы sqlcmd с переменными скрипта
- Изменение скриптов SQLCMD при помощи редактора запросов
- Управление шагами задания
- Create a CmdExec Job Step
Ошибка при запуске sql-скрипта из командной строки
и получил ошибку как на скриншоте
ERROR 1064(42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -h localhost -u root books p < bookorama.sql' at line 1
@Чад , @uzumaxy я пытался также выполнить "C:\WebServers\usr\local\mysql-5.1\bin> mysql -h localhost -u root books -p < bookorama.sql;" - быстро прокручивало экран - как будто выдавало подсказку по опциям. Далее пытался заходить в консоль mysql, выполнял команду use books , а затем show tables , на что выдавало
Empty set(0.00 sec) mysql>
