Запустить все файлы SQL в каталоге


117

У меня есть несколько файлов .sql, которые я должен запустить, чтобы применить изменения, сделанные другими разработчиками в базе данных SQL Server 2005. Файлы названы по следующему шаблону:

0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...

Есть ли способ запустить их все за один раз?

Ответы:


143

Создайте файл .BAT с помощью следующей команды:

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause

Если вам нужно указать имя пользователя и пароль

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P 
password -i"%%G"

Обратите внимание, что "-E" не требуется, если указан пользователь / пароль.

Поместите этот файл .BAT в каталог, из которого вы хотите запускать файлы .SQL, дважды щелкните файл .BAT, и все готово!


2
когда я запускал командный файл, возникает проблема с аутентификацией: «Ошибка входа в систему. Вход из ненадежного домена и не может использоваться с аутентификацией Windows». Есть ли способ указать имя пользователя и пароль, например, имя сервера и базу данных?
Санджай Махарджан

11
@SanjayMaharjan используйте -U для пользователя и -P для пароля, например:for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"
Rickedb

как я могу поместить вывод в отдельные файлы с помощью -o? всякий раз, когда я использую как -o temp.txt, этот temp.txt перезаписывается. Я хочу получить выходные файлы с тем же именем файла sql.
Кевин

@vijeth: хороший человек. Я думал сделать один за другим около 200 файлов sql. сэкономил много времени
Uthistran Selvaraj 05

@Vijeth, спасибо. я просто модифицирую для себя: только среда разработки REM REM !! Пауза REM для %% G в (* .sql) do sqlcmd / S "192.168.10.139 \ SQLEXPRESS" / d "TESTDEV_DB" -U "atiour" -P "atiour" -i "%% G" пауза REM REM All Script Беги успешно REM
атик саркер

71

Используйте FOR . Из командной строки:

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"

2
Мне пришлось добавить кавычки вокруг последнего "% f", чтобы он работал со скриптами, содержащими пробелы
Стив Райт

Для версии, которая работает в пакетных файлах, см. Этот ответ .
Ян Кемп

Мне также пришлось добавить некоторые другие параметры (например, / I для включения идентификаторов в кавычках)
Павел К.

мне нравится этот - но есть ли способ вывести результаты в файл? чтобы я мог легко видеть любые исключения? Я только что попробовал эту команду для 136 файлов .sql, поэтому я потерял видимость большинства из них
Rich

2
@Rich Чтобы перенаправить вывод в файл, используйте эту команду: for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) Подробнее о перенаправлении вывода вы можете прочитать здесь
danijelk 01

26
  1. В SQL Management Studio откройте новый запрос и введите все файлы, как показано ниже.

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  2. Перейдите в меню запросов в SQL Management Studio и убедитесь, что режим SQLCMD включен.
  3. Нажмите на SQLCMD Mode; файлы будут выделены серым цветом, как показано ниже

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  4. Теперь выполните

3
это действительно утомительно, если у меня есть сотни файлов.
devlin carnate

1
@devlincarnate: Предположительно, вы можете придумать способ автоматизации шага 1. Например, «dir / B * .sql> list.txt», а затем немного помассируйте этот файл list.txt.
Джефф Роу

@devlincarnate в новых версиях Windows, вы можете, удерживая клавишу Shift, щелкнуть файл правой кнопкой мыши и выбрать «Копировать как путь». Оттуда CTRL + V в окно SSMS. Он также работает с несколькими файлами. Выберите два или более файла в проводнике, щелкните правой кнопкой мыши любой из выделенных файлов и выберите «Копировать как путь». Повторите шаги в SSMS. Пути к файлам заключены в двойные кавычки, которые вы можете или не хотите удалять в SSMS с помощью функции «Найти / заменить».
Дэйв Мейсон

21

Убедитесь, что у вас включен SQLCMD, щелкнув опцию Query> SQLCMD mode в студии управления.

  1. Предположим, у вас есть четыре файла .sql ( script1.sql,script2.sql,script3.sql,script4.sql) в папке c:\scripts.

  2. Создайте основной файл сценария (Main.sql) со следующим:

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    :r c:\Scripts\script4.sql

    Сохраните Main.sql в самом каталоге c: \ scripts.

  3. Создайте командный файл ExecuteScripts.batсо следующим именем :

    SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
    PAUSE

    Не забудьте заменить <YourDatabaseName>на базу данных, которую вы хотите выполнять свои скрипты. Например, если база данных - «Сотрудник», команда будет следующей:

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
  4. Запустите командный файл, дважды щелкнув его.


Я только что отредактировал свой ответ. Также необходимо убедиться, что файлы сценариев существуют по указанному пути.
Ашиш Гупта

в этом подходе хорошо то, что при обнаружении любой ошибки прекращается выполнение дальнейших сценариев :) аналогично -bпримеру:SQLCMD -b -i "file 1.sql","file 2.sql"
Jaider

и плохая вещь в этом подходе, что нужно поддерживать список всех файлов SQL для запуска.
Франсиско д'Анкония, 03

10

Вы можете использовать ApexSQL Propagate . Это бесплатный инструмент, который выполняет несколько сценариев в нескольких базах данных. Вы можете выбрать столько скриптов, сколько вам нужно, и выполнить их для одной или нескольких баз данных (даже нескольких серверов). Вы можете создать список скриптов и сохранить его, а затем просто выбирать этот список каждый раз, когда вы хотите выполнять те же самые скрипты в созданном порядке (также можно добавить несколько списков скриптов):

Выбрать скрипты

Когда скрипты и базы данных выбраны, они будут показаны в главном окне, и все, что вам нужно сделать, это нажать кнопку «Выполнить», и все скрипты будут выполнены в выбранных базах данных в указанном порядке:

Выполнение скриптов


8

Общий запрос

сохраните приведенные ниже строки в блокноте с именем batch.bat и поместите в папку, где находится весь ваш файл сценария

 for %%G in (*.sql) do sqlcmd /S servername /d databasename  -i"%%G"
    pause

ПРИМЕР

для %% G в (* .sql) выполните sqlcmd / S NFGDDD23432 / d EMPLYEEDB -i "%% G" пауза

Иногда, если вам не удалось войти в систему, используйте приведенный ниже код с именем пользователя и паролем

for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause

для %% G в (* .sql) выполните sqlcmd / S NE8148server / d EMPLYEEDB -U Scott -P tiger -i "%% G" pause

После того, как вы создадите файл bat внутри папки, в которой находятся ваши файлы сценария, просто щелкните файл bat, и ваши сценарии будут выполнены


5

Я написал утилиту с открытым исходным кодом на C #, которая позволяет перетаскивать множество файлов SQL и запускать их в базе данных.

Утилита имеет следующие особенности:

  • Файлы сценариев перетаскивания
  • Запустите каталог файлов сценария
  • Sql-скрипт выводит сообщения во время выполнения
  • Скрипт пройден или не пройден, они окрашены в зеленый и красный цвет (желтый для работы)
  • Остановить при ошибке
  • Вариант открытия скрипта при ошибке
  • Запустить отчет со временем, затраченным на каждый скрипт
  • Общая продолжительность
  • Тестовое соединение с БД
  • Asynchronus
  • .Net 4 и протестировано с SQL 2008
  • Один файл exe
  • Убить соединение в любое время

4

Самый простой способ, который я нашел, включал следующие шаги (единственное требование - это быть в Win7 +):

  • откройте папку в проводнике
  • выберите все файлы сценария
  • нажмите Shift
  • щелкните правой кнопкой мыши выделение и выберите «Копировать как путь»
  • перейти в SQL Server Management Studio
  • создать новый запрос
  • Меню запросов, "Режим SQLCMD"
  • вставьте список, затем Ctrl + H, замените '"C: \' (или любую другую букву диска) на ': r" C:' (т.е. префикс строки с ': r')
  • запустить запрос

Звучит долго, но на самом деле очень быстро .. (звучит долго, я описал даже самые маленькие шаги)


2

Насколько я знаю, вы можете использовать команды osql или sqlcmd для выполнения нескольких файлов sql. Недостатком является то, что вам придется создать сценарий для обеих команд.

Использование SQLCMD для выполнения нескольких сценариев SQL Server

OSQL (это для sql server 2000)

http://msdn.microsoft.com/en-us/library/aa213087(v=SQL.80).aspx


1
@echo off
cd C:\Program Files (x86)\MySQL\MySQL Workbench 6.0 CE

for %%a in (D:\abc\*.sql) do (
echo %%a
mysql --host=ip --port=3306 --user=uid--password=ped < %%a
)

Шаг 1: скопируйте строки выше в блокнот, сохраните как летучую мышь.

step2: В папке abc диска d во всех файлах Sql в запросах, выполняемых на сервере sql.

Шаг 3: Укажите свой ip, идентификатор пользователя и пароль.


Этот вопрос относится к MSSQL, а не к MySQL.
Шон

0

Вы можете создать один сценарий, который будет вызывать все остальные.

Поместите в командный файл следующее:

@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"

Когда вы запустите этот командный файл, он создаст новый сценарий с именем all.sqlв том же каталоге, где находится командный файл. Он будет искать все файлы с расширением .sqlв том же каталоге, где находится командный файл.

Затем вы можете запустить все сценарии с помощью sqlplus user/pwd @all.sql(или расширить пакетный файл для вызова sqlplusпосле создания all.sqlсценария)


0

Для выполнения каждого файла SQL в одном каталоге используйте следующую команду:

ls | awk '{print "@"$0}' > all.sql

Эта команда создаст один файл SQL с именами каждого файла SQL в каталоге, добавленными знаком «@».

После all.sqlсоздания просто выполните all.sqlс SQLPlus, это выполнит каждый файл sql в all.sql.


0

Если вы можете использовать Interactive SQL:

1 - Создайте файл .BAT с этим кодом:

@ECHO OFF ECHO
for %%G in (*.sql) do dbisql -c "uid=dba;pwd=XXXXXXXX;ServerName=INSERT-DB-NAME-HERE" %%G
pause

2 - Измените pwd и ServerName.

3 - Поместите файл .BAT в папку, содержащую файлы .SQL, и запустите его.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.