Перейти к содержимому

Как запустить командную строку из скрипта sql

  • автор:

Как запустить командную строку из скрипта 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-скрипта из командной строки

alt text

и получил ошибку как на скриншоте

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> 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *