Запустіть усі файли 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 use -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

@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 Весь сценарій Запустити успішно REM
atik sarker

71

Використовуйте ЗА . З командного рядка:

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

2
Мені довелося додати лапки навколо останнього "% f", щоб він працював із сценаріями, які містять пробіли
Стів Райт,

Для версії, яка працює в пакетних файлах, дивіться цю відповідь .
Ян Кемп

Мені також довелося додати деякі інші параметри (наприклад, / я для включення ідентифікованих ідентифікаторів)
Pavel K

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

2
@Rich Щоб перенаправити вихід у файл, використовуйте цю команду: for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) Більше про перенаправлення виводу ви можете прочитати тут
danijelk

26
  1. У студії управління SQL відкрийте новий запит і введіть усі файли, як показано нижче

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  2. Перейдіть до меню "Запити" в студії управління SQL і переконайтесь, що режим "SQLCMD" увімкнено
  3. Клацніть на режимі SQLCMD; Файли будуть вибрані сірим кольором, як показано нижче

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  4. Тепер виконуй

3
це справді нудно, якщо у мене є сотні файлів.
девлін карнат

1
@devlincarnate: Імовірно, ви можете придумати спосіб автоматизації кроку 1. Наприклад, "dir / B * .sql> list.txt", а потім трохи помасажуйте файл list.txt.
Джефф Роу

@devlincarnate в нових версіях Windows, ви можете утримувати клавішу Shift, клацнути файл правою кнопкою миші та вибрати "Скопіювати як шлях". Звідти CTRL + V у вікно SSMS. Він також працює з декількома файлами. Виберіть два або більше файлів у Провіднику, клацніть правою кнопкою миші будь-який із виділених файлів та виберіть "Скопіювати як шлях". Повторіть дії в SSMS. Шляхи до файлів укладені у подвійні лапки, які ви можете або не хочете викреслити в SSMS за допомогою Find / Replace.
Дейв Мейсон

21

Переконайтеся, що увімкнено SQLCMD, натиснувши на пункт Запит> Режим SQLCMD в студії управління.

  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: \ скриптах.

  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, якими слід керувати.
Франсіско д'Анконія

10

Ви можете використовувати ApexSQL Propagate . Це безкоштовний інструмент, який виконує безліч скриптів на декількох базах даних. Ви можете вибрати стільки сценаріїв, скільки вам потрібно, і виконати їх на одній або декількох базах даних (навіть на декількох серверах). Ви можете створити список скриптів і зберегти його, а потім просто вибрати цей список кожного разу, коли потрібно виконати ті самі скрипти в створеному порядку (також можна додати кілька списків скриптів):

Виберіть сценарії

Коли вибрані сценарії та бази даних, вони будуть показані в головному вікні, і все, що вам потрібно зробити, це натиснути кнопку «Виконати», і всі сценарії виконуватимуться на вибраних базах даних у заданому порядку:

Виконання сценаріїв


8

Загальний запит

збережіть рядки нижче в блокноті з назвою batch.bat і помістіть всередину папки, де є весь ваш файл сценарію

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

ПРИКЛАД

для %% G у (* .sql) do 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) do sqlcmd / S NE8148server / d EMPLYEEDB -U Скотт -P тигр -i "%% G" пауза

Після створення файлу bat всередині папки, в якій знаходяться ваші файли сценаріїв, просто натисніть на файл bat, і ваші сценарії виконуватимуться


5

Я написав утиліту з відкритим кодом у C #, яка дозволяє перетягувати багато файлів SQL і починати їх запускати проти бази даних.

Утиліта має такі функції:

  • Перетягування файлів сценаріїв
  • Запустіть каталог файлів сценаріїв
  • Sql Script виклав повідомлення під час виконання
  • Сценарій, пройдений або невдалий, кольоровий і червоний (жовтий для запуску)
  • Варіант "Стоп на помилку"
  • Відкрити варіант сценарію при помилці
  • Запустити звіт із часом, відведеним для кожного сценарію
  • Загальний час тривалості
  • Перевірте з'єднання БД
  • Асинхрон
  • .Net 4 та протестовано з SQL 2008
  • Один файл EXE
  • Перервіть з'єднання в будь-який час

4

Найпростіший спосіб, який я знайшов, включав наступні кроки (єдина вимога - це бути в Win7 +):

  • відкрийте папку в Провіднику
  • виберіть усі файли сценаріїв
  • натисніть Shift
  • клацніть правою кнопкою миші та виберіть "Скопіювати як шлях"
  • перейдіть до студії управління SQL Server
  • створити новий запит
  • Меню запитів, "режим SQLCMD"
  • вставте список, потім Ctrl + H, замініть "" C: \ "(або будь-яку літеру диска) на": r "C: '(тобто приставте рядки з': r ')
  • запустіть запит

Це звучить довго, але насправді це дуже швидко .. (це звучить довго, як я описав навіть найменші кроки)


2

Що я знаю, ви можете використовувати команди osql або sqlcmd для виконання декількох файлів sql. Недолік полягає в тому, що вам доведеться створити сценарій для обох команд.

Використання SQLCMD для виконання декількох скриптів SQL Server

OSQL (Це для sql сервера 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: вище рядки скопіюйте в блокнот, збережіть його як bat.

step2: Папка abc d d у всіх файлах Sql у запитах, виконаних на сервері sql.

step3: введіть 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

Якщо ви можете використовувати інтерактивний 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.