2010-04-06 5 views
89

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

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

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

ответ

99

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

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

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

+2

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

+4

@SanjayMaharjan использует -U для пользователя и -P для пароля, например: 'for %% G in (* .sql) do sqlcmd/S имя_сервера/d имя_базы базы данных -U имя пользователя -P" пароль "-i" %% G " ' – Rickedb

+0

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

17

Убедитесь, что вы Sqlcmd включен, нажав на Query > вариант режима 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. Выполнить пакетный файл, дважды щелкнув на то же самое.

+1

'неправильный синтаксис near ':'. 'for': r foo.sql' – abatishchev

+0

Я просто edi ответила. Кроме того, необходимо убедиться, что файлы сценария существуют по указанному пути. –

+0

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

64

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

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

Мне пришлось добавить цитаты вокруг последнего «% f», чтобы он работал со сценариями, содержащими пробелы. –

+0

. Версия, которая работает в пакетных файлах, приведена в [этот ответ] (http://stackoverflow.com/a/6504317/ 70345). –

+0

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

5

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

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

  • Drag And Drop файлы сценариев
  • Выполнить каталог файлов сценариев
  • Sql Script из пут сообщений во время исполнения
  • Script пройден или которые цветной зеленый и красный (желтый для работы)
  • Останов по ошибке
  • Открытый скрипт по ошибке
  • отчет Ран со временем приняты для каждого сценария
  • Общая продолжительность соединения
  • Тест DB
  • Asynchronus
  • .Net 4 & протестирована с SQL 2008
  • одноместного исполняемый файл
  • убийство соединения в в любое время
0

Вы можете создать один скрипт, который вызывает al другие.

Вставьте следующий в пакетный файл:

@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 сценария)

15
  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; Файлы будут выбраны в сером цвете, как показано ниже

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

Это действительно утомительно, если у меня есть сотни файлов. –

6

общего запрос

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

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

EXA MPLE

для %% G in (*.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 NE8148serverEMPLYEEDB -U Скотт -P тигр -i «%% G» паузы

После создания файла летучей мыши внутри папки, в которой ваши файлы сценарии там просто нажмите на летучей мыши файл скриптов будут выполнен

0

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

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

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

После создания all.sql выполнить all.sql с помощью SQLPlus, это будет выполнять каждый sql-файл в all.sql.

8

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

Select scripts

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

Scripts execution

Смежные вопросы