从批处理文件执行SQL Server脚本

时间:2012-05-30 13:15:56

标签: sql-server-2008

我有一个脚本需要使用批处理文件执行。我是否在批处理文件中使用SQLCMD来运行脚本?此外,该脚本还将数据插入数据库中的表。我应该如何在批处理文件中格式化SQLCMD,以便它知道它可以使用哪个数据库?

3 个答案:

答案 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脚本。批处理文件。