Выполнение сценария 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".