我有一个脚本需要使用批处理文件执行。我是否在批处理文件中使用SQLCMD来运行脚本?此外,该脚本还将数据插入数据库中的表。我应该如何在批处理文件中格式化SQLCMD,以便它知道它可以使用哪个数据库?
答案 0 :(得分:8)
首先,将查询保存到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
如果您还需要进行身份验证,则需要在SQLCMD命令中添加-U和-P参数。
这是一篇关于sqlcmd utility的MSDN文章,其中包含更多详细信息。
答案 1 :(得分:3)
使用-S
开关指定服务器和实例名称,例如-S MyDbServer\Database1
SQLCMD
文档found here。
答案 2 :(得分:1)
如果要为多个数据库执行所有.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"中调用它们。
现在,您将通过单击" RunScript-All.bat"来运行许多数据库中的所有sql脚本。批处理文件。