Выполнение сценария SQL Server из командного файла

У меня есть скрипт, который мне нужно выполнить с помощью командного файла. Использую ли я SQLCMD в командном файле для запуска скрипта? Также скрипт вставляет данные в таблицу в базе данных. Как мне отформатировать SQLCMD в командном файле, чтобы он знал, с какой базой данных он должен работать?

3 ответа

Решение

Сначала сохраните ваш запрос в текстовый файл sql (текстовый файл с расширением.sql). Обязательно добавьте оператор USE в начале, который сообщает серверу, с какой базой данных вы хотите работать. Используя пример из MSDN:

USE AdventureWorks2008R2;
GO
SELECT p.FirstName + ' ' + p.LastName AS 'Employee Name',
a.AddressLine1, a.AddressLine2 , a.City, a.PostalCode 
FROM Person.Person AS p 
   INNER JOIN HumanResources.Employee AS e 
        ON p.BusinessEntityID = e.BusinessEntityID
    INNER JOIN Person.BusinessEntityAddress bea 
        ON bea.BusinessEntityID = e.BusinessEntityID
    INNER JOIN Person.Address AS a 
        ON a.AddressID = bea.AddressID;
GO

Затем в вашем пакетном файле вы запускаете SQLCMD и передаете ему файл sql (с путем) в качестве параметра.

sqlcmd -S myServer \ instanceName -i C: \ myScript.sql

Если вам также требуется аутентификация, вам нужно добавить параметры -U и -P в команду SQLCMD.

Вот статья MSDN, посвященная утилите sqlcmd, с более подробной информацией.

Использовать -S переключиться на указание имен серверов и экземпляров, например -S MyDbServer\Database1

SQLCMD Документация найдена здесь.

Если вы хотите выполнить все файлы.sql (несколько сценариев sql в папке) для нескольких баз данных, то создайте пакетный файл "RunScript-All.bat" со следующим содержимым

echo "======Start - Running scripts for master database======="
Call RunScript-master.bat
echo "=======End - Running scripts for master database=========="
pause
echo "=====Start - Running scripts for model database========"
Call RunScript-model.bat
echo "=======End - Running scripts for master database=========="
pause

Определение для отдельного пакетного файла для конкретной базы данных, т.е. "RunScript-master.bat", может быть написано, как показано ниже

for %%G in (*.sql) do sqlcmd /S .\SQL2014 /U sa /P XXXXXXXXX /d master  -i"%%G"
::pause

Создайте много файлов для разных баз данных и вызывайте их из "RunScript-All.bat".

Теперь вы можете запустить все сценарии sql во многих базах данных, нажав на пакетный файл "RunScript-All.bat".

Другие вопросы по тегам